blob: f46ad6ddd22457808764a7a9198d7995e70cc254 [file] [log] [blame]
# 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()