diff options
| author | Kenny Woodson <kwoodson@redhat.com> | 2014-12-18 12:52:30 -0500 | 
|---|---|---|
| committer | Kenny Woodson <kwoodson@redhat.com> | 2014-12-18 13:21:14 -0500 | 
| commit | 2d7624e4f06cb053487059989def7b8b647b57a0 (patch) | |
| tree | c344c448fbe72531d6ae0ea5dd194ad62375a8f9 | |
| parent | 164094a4adddc767f894b6b42c9ceff0d4bae19e (diff) | |
| download | openshift-2d7624e4f06cb053487059989def7b8b647b57a0.tar.gz openshift-2d7624e4f06cb053487059989def7b8b647b57a0.tar.bz2 openshift-2d7624e4f06cb053487059989def7b8b647b57a0.tar.xz openshift-2d7624e4f06cb053487059989def7b8b647b57a0.zip | |
unittest for merge_destructively. More to come
Added a readme so its obvious how to run tests
Leaving this alone.  Getting cleaned up in next PR
Fixing space
| -rwxr-xr-x | inventory/multi_ec2.py | 10 | ||||
| -rw-r--r-- | test/env-setup | 8 | ||||
| -rw-r--r-- | test/units/README.md | 7 | ||||
| -rwxr-xr-x | test/units/mutli_ec2_test.py | 67 | 
4 files changed, 88 insertions, 4 deletions
| diff --git a/inventory/multi_ec2.py b/inventory/multi_ec2.py index 1fe18a67e..97fd10f36 100755 --- a/inventory/multi_ec2.py +++ b/inventory/multi_ec2.py @@ -119,6 +119,7 @@ class MultiEc2(object):                  "code": process.returncode              }) +        # process --host results          if not self.args.host:              # For any non-zero, raise an error on it              for result in all_results: @@ -128,7 +129,7 @@ class MultiEc2(object):                      self.all_ec2_results[result['name']] = json.loads(result['out'])              values = self.all_ec2_results.values()              values.insert(0, self.result) -            [self.merge_destructively(self.result, x) for x in  values] +            [MultiEc2.merge_destructively(self.result, x) for x in  values]          else:              # For any 0 result, return it              count = 0 @@ -139,12 +140,13 @@ class MultiEc2(object):                  if count > 1:                      raise RuntimeError("Found > 1 results for --host %s. \                                         This is an invalid state." % self.args.host) -    def merge_destructively(self, a, b): +    @staticmethod +    def merge_destructively(a, b):          "merges b into a"          for key in b:              if key in a:                  if isinstance(a[key], dict) and isinstance(b[key], dict): -                    self.merge_destructively(a[key], b[key]) +                    MultiEc2.merge_destructively(a[key], b[key])                  elif a[key] == b[key]:                      pass # same leaf value                  # both lists so add each element in b to a if it does ! exist @@ -181,7 +183,7 @@ class MultiEc2(object):          parser = argparse.ArgumentParser(description='Produce an Ansible Inventory file based on a provider')          parser.add_argument('--list', action='store_true', default=True,                             help='List instances (default: True)') -        parser.add_argument('--host', action='store', +        parser.add_argument('--host', action='store', default=False,                             help='Get all the variables about a specific instance')          self.args = parser.parse_args() diff --git a/test/env-setup b/test/env-setup new file mode 100644 index 000000000..156593571 --- /dev/null +++ b/test/env-setup @@ -0,0 +1,8 @@ +#!/bin/bash + +CUR_PATH=$(pwd) + +PREFIX_PYTHONPATH=$CUR_PATH/inventory/ + + +export PYTHONPATH=$PREFIX_PYTHONPATH:$PYTHONPATH diff --git a/test/units/README.md b/test/units/README.md new file mode 100644 index 000000000..3bed227eb --- /dev/null +++ b/test/units/README.md @@ -0,0 +1,7 @@ +Location for python unittests. + +These should be run by sourcing the env-setup: +$ source test/env-setup + +Then navigate to the test/units/ directory. +$ python -m unittest multi_ec2_test diff --git a/test/units/mutli_ec2_test.py b/test/units/mutli_ec2_test.py new file mode 100755 index 000000000..4e6fe61c5 --- /dev/null +++ b/test/units/mutli_ec2_test.py @@ -0,0 +1,67 @@ +#!/usr/bin/env python + +import unittest +import sys +import os +import sys +import multi_ec2 + +class MultiEc2Test(unittest.TestCase): + +    def setUp(self): +        pass + +    def test_merge_simple_1(self): +        a = {"key1" : 1} +        b = {"key1" : 2} +        result = {} +        [multi_ec2.MultiEc2.merge_destructively(result, x) for x in [a,b]] +        self.assertEqual(result, {"key1": [1,2]}) + +    def test_merge_b_empty(self): +        a = {"key1" : 1} +        b = {} +        result = {} +        [multi_ec2.MultiEc2.merge_destructively(result, x) for x in [a,b]] +        self.assertEqual(result, {"key1": 1}) + +    def test_merge_a_empty(self): +        b = {"key1" : 1} +        a = {} +        result = {} +        [multi_ec2.MultiEc2.merge_destructively(result, x) for x in [a,b]] +        self.assertEqual(result, {"key1": 1}) + +    def test_merge_hash_array(self): +        a = {"key1" : {"hasha": 1}} +        b = {"key1" : [1,2]} +        result = {} +        [multi_ec2.MultiEc2.merge_destructively(result, x) for x in [a,b]] +        self.assertEqual(result, {"key1": [{"hasha": 1}, 1,2]}) + +    def test_merge_array_hash(self): +        a = {"key1" : [1,2]} +        b = {"key1" : {"hasha": 1}} +        result = {} +        [multi_ec2.MultiEc2.merge_destructively(result, x) for x in [a,b]] +        self.assertEqual(result, {"key1": [1,2, {"hasha": 1}]}) + +    def test_merge_keys_1(self): +        a = {"key1" : [1,2], "key2" : {"hasha": 2}} +        b = {"key2" : {"hashb": 1}} +        result = {} +        [multi_ec2.MultiEc2.merge_destructively(result, x) for x in [a,b]] +        self.assertEqual(result, {"key1": [1,2], "key2": {"hasha": 2, "hashb": 1}}) + +    def test_merge_recursive_1(self): +        a = {"a" : {"b": {"c": 1}}} +        b = {"a" : {"b": {"c": 2}}} +        result = {} +        [multi_ec2.MultiEc2.merge_destructively(result, x) for x in [a,b]] +        self.assertEqual(result, {"a": {"b": {"c": [1,2]}}}) + +    def tearDown(self): +        pass + +if __name__ == "__main__": +  unittest.main() | 
