# Copyright 2022 The Pigweed Authors # # Licensed under the Apache License, Version 2.0 (the "License"); you may not # use this file except in compliance with the License. You may obtain a copy of # the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations under # the License. """Unit tests for pw_software_update/cli.py.""" import unittest from pw_software_update import cli, metadata, update_bundle from pw_software_update.tuf_pb2 import TargetsMetadata class AddFileToBundleTest(unittest.TestCase): """Test adding a target file to an existing bundle""" def test_adding_file_to_bundle(self): """Adds a file to bundle""" bundle = update_bundle.gen_empty_update_bundle() target_payloads = { 'foo': b'foo contents', 'bar': b'bar contents', } for name, contents in target_payloads.items(): bundle = cli.add_file_to_bundle( bundle=bundle, file_name=name, file_contents=contents ) # Checks for existence of target in target payloads self.assertEqual(target_payloads['foo'], bundle.target_payloads['foo']) self.assertEqual( len(bundle.target_payloads['foo']), len(target_payloads['foo']) ) self.assertEqual(target_payloads['bar'], bundle.target_payloads['bar']) self.assertEqual( len(bundle.target_payloads['bar']), len(target_payloads['bar']) ) def test_adding_duplicate_file_fails(self): """Test for adding a duplicate target name to bundle""" bundle = update_bundle.gen_empty_update_bundle() target_payloads = { 'foo': b'foo contents', } for name, contents in target_payloads.items(): bundle = cli.add_file_to_bundle( bundle=bundle, file_name=name, file_contents=contents ) # Checks for raised exceptions when adding a duplicate file name # in target payload with self.assertRaises(Exception): bundle = cli.add_file_to_bundle( bundle=bundle, file_name='foo', file_contents=b'does not matter' ) def test_adding_duplicate_target_file_fails(self): """Test for adding a duplicate target file to bundle""" bundle = update_bundle.gen_empty_update_bundle() target_payloads = {'foo': b'asrgfdasrgfdasrgfdasrgfd'} for name, contents in target_payloads.items(): bundle = cli.add_file_to_bundle( bundle=bundle, file_name=name, file_contents=contents ) # Adding a target file with no matching target_payload file name target_file = metadata.gen_target_file('shoo', b'cvbfbzbz') signed_targets_metadata = bundle.targets_metadata['targets'] targets_metadata = TargetsMetadata().FromString( signed_targets_metadata.serialized_targets_metadata ) targets_metadata.target_files.append(target_file) bundle.targets_metadata[ 'targets' ].serialized_targets_metadata = targets_metadata.SerializeToString() # Checks for raised exception for duplicate target file with self.assertRaises(Exception): bundle = cli.add_file_to_bundle( bundle=bundle, file_name='shoo', file_contents=b'cvbfbzbz' ) if __name__ == '__main__': unittest.main()