def testNodeLockedLaunchesMultiple(self): """Test --target node_locked launches multiple jobs.""" # Do not mock LaunchOne, so that we can grab the input= passed to run(). args = ['--archive', 'gs://test/file.bin', '--keyset', 'test-keyset', '--target', 'node_locked', '--dev01', '1', '0x1234', '--dev01', '2', '33'] self.assertEqual(0, trigger.main(args)) self.log_error.assert_not_called() expected_properties = [ {'archive': 'gs://test/file.bin', 'build_target': {'name': 'unknown'}, 'channel': 0, 'cr50_instructions': {'target': trigger._target_types['node_locked'], 'device_id': '00000001-00001234'}, 'signer_type': sign_image_pb2.SIGNER_PRODUCTION, 'image_type': common_pb2.CR50_FIRMWARE, 'keyset': 'test-keyset'}, {'archive': 'gs://test/file.bin', 'build_target': {'name': 'unknown'}, 'channel': 0, 'cr50_instructions': {'target': trigger._target_types['node_locked'], 'device_id': '00000002-00000021'}, 'signer_type': sign_image_pb2.SIGNER_PRODUCTION, 'image_type': common_pb2.CR50_FIRMWARE, 'keyset': 'test-keyset'}] # Check the calls in two parts, since we need to convert the json string # back to a dict. self.assertEqual(self.rc.call_args_list, [ mock.call( ['bb', 'add', '-p', '@/dev/stdin', trigger.CR50_PRODUCTION_JOB], log_output=True, input=mock.ANY) for _ in expected_properties]) self.assertEqual( expected_properties, [json.loads(x[1]['input']) for x in self.rc.call_args_list])
def testPropertiesCorrect(self): """Test minimal instructions.""" launch = self.PatchObject(trigger, 'LaunchOne') archive = 'gs://test/file.bin' keyset = 'keyset' channel = 'canary' build_target = 'board' target = 'prepvt' signer = 'production' image = 'cr50_firmware' args = [ '--archive', archive, '--keyset', keyset, '--channel', channel, '--build-target', build_target, '--target', target, '--signer-type', signer, '--image-type', image ] self.assertEqual(0, trigger.main(args)) launch.assert_called_once_with( False, trigger.CR50_PRODUCTION_JOB, { 'archive': archive, 'build_target': { 'name': build_target }, 'channel': trigger._channels[channel], 'cr50_instructions': { 'target': trigger._target_types[target] }, 'image_type': trigger._image_types[image], 'keyset': keyset, 'signer_type': trigger._signer_types[signer] })
def testDeviceIdRequiresNodeLocked(self): """Test --device_id is rejected if not node_locked.""" launch = self.PatchObject(trigger, 'LaunchOne') args = ['--archive', 'gs://test/file.bin', '--keyset', 'test-keyset', '--target', 'general_release', '--dev01', '1', '0x1234'] self.assertEqual(1, trigger.main(args)) launch.assert_not_called() self.assertEqual(1, self.log_error.call_count)
def testNodeLockedRequiresDeviceId(self): """Test --target node_locked requires --device-id.""" launch = self.PatchObject(trigger, 'LaunchOne') args = ['--archive', 'gs://test/file.bin', '--keyset', 'test-keyset', '--target', 'node_locked'] self.assertEqual(1, trigger.main(args)) launch.assert_not_called() self.assertEqual(1, self.log_error.call_count)
def testNodeLockedCatchesBadDeviceId(self): """Test --target node_locked catches bad --device-id.""" launch = self.PatchObject(trigger, 'LaunchOne') args = ['--archive', 'gs://test/file.bin', '--keyset', 'test-keyset', '--target', 'node_locked', '--device-id', '12345678-9ABCDEFG', '--dev01', '-1', '0x1234'] self.assertEqual(1, trigger.main(args)) launch.assert_not_called() self.assertEqual(1, self.log_error.call_count)
def testMinimal(self): """Test minimal instructions.""" launch = self.PatchObject(trigger, 'LaunchOne') args = ['--archive', 'gs://test/file.bin', '--keyset', 'test-keyset'] self.assertEqual(0, trigger.main(args)) launch.assert_called_once_with( False, trigger.CR50_PRODUCTION_JOB, { 'archive': 'gs://test/file.bin', 'build_target': {'name': 'unknown'}, 'channel': common_pb2.CHANNEL_UNSPECIFIED, 'cr50_instructions': { 'target': sign_image_pb2.Cr50Instructions.PREPVT}, 'image_type': common_pb2.CR50_FIRMWARE, 'keyset': 'test-keyset', 'signer_type': sign_image_pb2.SIGNER_PRODUCTION})