It is not a separate package since Python 3.3 Signed-off-by: Lubomír Sedlář <lsedlar@redhat.com> (cherry picked from commit 3987688de6720d951bfeb0b49c364df9738b490b)
		
			
				
	
	
		
			127 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # -*- coding: utf-8 -*-
 | |
| 
 | |
| import unittest
 | |
| from unittest import mock
 | |
| 
 | |
| from pungi import media_split
 | |
| 
 | |
| 
 | |
| class ConvertMediaSizeTestCase(unittest.TestCase):
 | |
|     def test_size_parser_correct_number_as_int(self):
 | |
|         self.assertEqual(media_split.convert_media_size(123), 123)
 | |
| 
 | |
|     def test_size_parser_correct_number_as_str(self):
 | |
|         self.assertEqual(media_split.convert_media_size("123"), 123)
 | |
| 
 | |
|     def test_size_parser_with_unit_b(self):
 | |
|         self.assertEqual(media_split.convert_media_size("123b"), 123)
 | |
| 
 | |
|     def test_size_parser_with_unit_k(self):
 | |
|         self.assertEqual(media_split.convert_media_size("123k"), 123 * 1024)
 | |
| 
 | |
|     def test_size_parser_with_unit_M(self):
 | |
|         self.assertEqual(media_split.convert_media_size("123M"), 123 * 1024 * 1024)
 | |
| 
 | |
|     def test_size_parser_with_unit_G(self):
 | |
|         self.assertEqual(
 | |
|             media_split.convert_media_size("123G"), 123 * 1024 * 1024 * 1024
 | |
|         )
 | |
| 
 | |
|     def test_size_parser_with_negative_number(self):
 | |
|         with self.assertRaises(ValueError):
 | |
|             media_split.convert_media_size(-15)
 | |
| 
 | |
|     def test_size_parser_with_unknown_unit(self):
 | |
|         with self.assertRaises(ValueError):
 | |
|             media_split.convert_media_size("123X")
 | |
| 
 | |
| 
 | |
| class ConvertFileSizeTestCase(unittest.TestCase):
 | |
|     def test_round_up(self):
 | |
|         self.assertEqual(media_split.convert_file_size(123, 2048), 2048)
 | |
| 
 | |
|     def test_exactly_block_size(self):
 | |
|         self.assertEqual(media_split.convert_file_size(100, 100), 100)
 | |
| 
 | |
| 
 | |
| def bl(s):
 | |
|     return s * 2048
 | |
| 
 | |
| 
 | |
| class MediaSplitterTestCase(unittest.TestCase):
 | |
|     def setUp(self):
 | |
|         self.compose = mock.Mock()
 | |
| 
 | |
|     def test_sum_size(self):
 | |
|         ms = media_split.MediaSplitter(bl(100))
 | |
|         ms.add_file("first", bl(20))
 | |
|         ms.add_file("second", bl(30))
 | |
|         ms.add_file("third", 10)
 | |
| 
 | |
|         self.assertEqual(ms.total_size, bl(50) + 10)
 | |
|         self.assertEqual(ms.total_size_in_blocks, bl(51))
 | |
| 
 | |
|     def test_add_same_file_twice(self):
 | |
|         ms = media_split.MediaSplitter(bl(100))
 | |
|         ms.add_file("first", bl(20))
 | |
|         ms.add_file("first", bl(20))
 | |
| 
 | |
|         self.assertEqual(ms.total_size, bl(20))
 | |
| 
 | |
|     def test_add_same_file_twice_with_different_size(self):
 | |
|         ms = media_split.MediaSplitter(bl(100))
 | |
|         ms.add_file("first", bl(20))
 | |
|         with self.assertRaises(ValueError):
 | |
|             ms.add_file("first", bl(30))
 | |
| 
 | |
|     def test_add_too_big_file(self):
 | |
|         ms = media_split.MediaSplitter(bl(100))
 | |
|         with self.assertRaises(ValueError):
 | |
|             ms.add_file("too-big", bl(300))
 | |
| 
 | |
|     def test_fit_on_one(self):
 | |
|         ms = media_split.MediaSplitter(bl(100), compose=self.compose)
 | |
|         ms.add_file("first", bl(20))
 | |
|         ms.add_file("second", bl(30))
 | |
| 
 | |
|         self.assertEqual(ms.split(), [{"files": ["first", "second"], "size": bl(50)}])
 | |
| 
 | |
|     def test_split_on_two_discs(self):
 | |
|         ms = media_split.MediaSplitter(bl(100), compose=self.compose)
 | |
|         ms.add_file("first", bl(25))
 | |
|         ms.add_file("second", bl(40))
 | |
|         ms.add_file("third", bl(80))
 | |
| 
 | |
|         self.assertEqual(
 | |
|             ms.split(),
 | |
|             [
 | |
|                 {"files": ["first", "second"], "size": bl(65)},
 | |
|                 {"files": ["third"], "size": bl(80)},
 | |
|             ],
 | |
|         )
 | |
| 
 | |
|     def test_split_with_sticky_file(self):
 | |
|         ms = media_split.MediaSplitter(bl(100))
 | |
|         ms.add_file("sticky", bl(15), sticky=True)
 | |
|         ms.add_file("first", bl(25))
 | |
|         ms.add_file("second", bl(40))
 | |
|         ms.add_file("third", bl(80))
 | |
| 
 | |
|         self.assertEqual(
 | |
|             ms.split(),
 | |
|             [
 | |
|                 {"files": ["sticky", "first", "second"], "size": bl(80)},
 | |
|                 {"files": ["sticky", "third"], "size": bl(95)},
 | |
|             ],
 | |
|         )
 | |
| 
 | |
|     def test_split_unlimited_media(self):
 | |
|         ms = media_split.MediaSplitter(None, compose=self.compose)
 | |
|         ms.add_file("first", bl(25))
 | |
|         ms.add_file("second", bl(40))
 | |
|         ms.add_file("third", bl(80))
 | |
| 
 | |
|         self.assertEqual(
 | |
|             ms.split(), [{"files": ["first", "second", "third"], "size": bl(145)}]
 | |
|         )
 |