aoh

A tool for running Ansible playbooks with `curl <url> | python` commands
git clone https://git.ashermorgan.net/aoh/
Log | Files | Refs | README

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'])