1 #!/usr/bin/env python 2 # 3 # Copyright (C) 2016 The Android Open Source Project 4 # 5 # Licensed under the Apache License, Version 2.0 (the "License"); 6 # you may not use this file except in compliance with the License. 7 # You may obtain a copy of the License at 8 # 9 # http://www.apache.org/licenses/LICENSE-2.0 10 # 11 # Unless required by applicable law or agreed to in writing, software 12 # distributed under the License is distributed on an "AS IS" BASIS, 13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 # See the License for the specific language governing permissions and 15 # limitations under the License. 16 # 17 18 import os 19 import unittest 20 21 from vts.utils.python.archive import archive_parser 22 23 24 class ArchiveParserTest(unittest.TestCase): 25 """Unit tests for archive_parser of vts.utils.python.archive. 26 """ 27 28 def testReadHeaderPass(self): 29 """Tests that archive is read when header is correct. 30 31 Parses archive content containing only the signature. 32 """ 33 try: 34 archive = archive_parser.Archive(archive_parser.Archive.GLOBAL_SIG) 35 archive.Parse() 36 except ValueError: 37 self.fail('Archive reader read improperly.') 38 39 def testReadHeaderFail(self): 40 """Tests that parser throws error when header is invalid. 41 42 Parses archive content lacking the correct signature. 43 """ 44 archive = archive_parser.Archive('Fail.') 45 self.assertRaises(ValueError, archive.Parse) 46 47 def testReadFile(self): 48 """Tests that file is read correctly. 49 50 Tests that correctly formatted file in archive is read correctly. 51 """ 52 content = archive_parser.Archive.GLOBAL_SIG 53 file_name = 'test_file' 54 content += file_name + ' ' * (archive_parser.Archive.FILE_ID_LENGTH - 55 len(file_name)) 56 content += ' ' * archive_parser.Archive.FILE_TIMESTAMP_LENGTH 57 content += ' ' * archive_parser.Archive.OWNER_ID_LENGTH 58 content += ' ' * archive_parser.Archive.GROUP_ID_LENGTH 59 content += ' ' * archive_parser.Archive.FILE_MODE_LENGTH 60 61 message = 'test file contents' 62 message_size = str(len(message)) 63 content += message_size + ' ' * (archive_parser.Archive.CONTENT_SIZE_LENGTH - 64 len(message_size)) 65 content += archive_parser.Archive.END_TAG 66 content += message 67 archive = archive_parser.Archive(content) 68 archive.Parse() 69 self.assertIn(file_name, archive.files) 70 self.assertEquals(archive.files[file_name], message) 71 72 if __name__ == "__main__": 73 unittest.main() 74