test_playbook.py (3128B)
1 import os 2 import unittest 3 from unittest.mock import mock_open, patch 4 5 import aoh.playbook 6 from aoh.playbook import PlaybookFileError, get_playbook 7 8 9 class TestPlaybookGetPlaybook(unittest.TestCase): 10 @patch.object(aoh.playbook, 'open', mock_open(read_data='main.yml:')) 11 def test_default_values(self): 12 pb = get_playbook('main.yml') 13 14 self.assertEqual(pb.name, 'main.yml') 15 self.assertEqual(pb.path, os.path.abspath('main.yml')) 16 self.assertEqual(pb.host, None) 17 self.assertEqual(pb.groups, []) 18 self.assertEqual(pb.env, {}) 19 self.assertEqual(pb.limit, True) 20 self.assertEqual(pb.password, False) 21 self.assertEqual(pb.output, True) 22 self.assertEqual(pb.allow_opts, []) 23 self.assertEqual(pb.block_opts, []) 24 self.assertEqual(pb.jinja_args, False) 25 self.assertEqual(pb.extra_args, []) 26 self.assertEqual(pb.web_description, None) 27 28 29 @patch.object(aoh.playbook, 'open', mock_open(read_data='x: [')) 30 def test_invalid_yaml(self): 31 with self.assertRaisesRegex(PlaybookFileError, 'Failed to parse'): 32 get_playbook('main.yml') 33 34 35 @patch.object(aoh.playbook, 'open', mock_open(read_data='other.yml:')) 36 def test_missing_playbook(self): 37 self.assertEqual(get_playbook('main.yml'), None) 38 39 40 @patch.object(aoh.playbook, 'open', 41 mock_open(read_data='main.yml:\n allow_opts: [--step]')) 42 def test_unsupported_opts(self): 43 with self.assertRaisesRegex(PlaybookFileError, 'not supported'): 44 get_playbook('main.yml') 45 46 47 @patch.object(aoh.playbook, 'open', 48 mock_open(read_data='main.yml:\n allow_opts: [--limit]')) 49 def test_limit_opt_enabled(self): 50 with self.assertRaisesRegex(PlaybookFileError, 'if limit is true'): 51 get_playbook('main.yml') 52 53 54 @patch.object(aoh.playbook, 'open', 55 mock_open(read_data='main.yml:\n limit: false\n' 56 ' allow_opts: [--limit]')) 57 def test_limit_opt_disabled(self): 58 pb = get_playbook('main.yml') 59 self.assertEqual(pb.limit, False) 60 self.assertEqual(pb.allow_opts, ['--limit']) 61 62 63 @patch.object(aoh.playbook, 'open', 64 mock_open(read_data='main.yml:\n limit: asdf')) 65 def test_bad_bool_type(self): 66 with self.assertRaisesRegex(PlaybookFileError, 'must be of type'): 67 get_playbook('main.yml') 68 69 70 @patch.object(aoh.playbook, 'open', 71 mock_open(read_data='main.yml:\n limit: false')) 72 def test_good_bool_type(self): 73 self.assertEqual(get_playbook('main.yml').limit, False) 74 75 76 @patch.object(aoh.playbook, 'open', 77 mock_open(read_data='main.yml:\n groups: asdf')) 78 def test_bad_array_type(self): 79 with self.assertRaisesRegex(PlaybookFileError, 'must be of type'): 80 get_playbook('main.yml') 81 82 83 @patch.object(aoh.playbook, 'open', 84 mock_open(read_data='main.yml:\n groups: [one, two]')) 85 def test_good_array_type(self): 86 self.assertEqual(get_playbook('main.yml').groups, ['one', 'two'])