Exemple #1
0
 def test_unit_colocation_to_unit(self):
     cs = changeset.ChangeSet({
         'services': {
             'django-new': {
                 'charm': 'cs:trusty/django-42',
                 'num_units': 1,
             },
             'django-unit': {
                 'charm': 'cs:trusty/django-42',
                 'num_units': 1,
                 'to': 'django-new/0',
             },
         },
         'machines': {},
     })
     cs.services_added = {
         'django-new': 'deploy-1',
         'django-unit': 'deploy-2',
     }
     handler = changeset.handle_units(cs)
     self.assertIsNone(handler)
     self.assertEqual([
         {
             'id': 'addUnit-0',
             'method': 'addUnit',
             'args': ['$deploy-1', None],
             'requires': ['deploy-1'],
         },
         {
             'id': 'addUnit-1',
             'method': 'addUnit',
             'args': ['$deploy-2', '$addUnit-0'],
             'requires': ['deploy-2', 'addUnit-0'],
         },
     ], cs.recv())
Exemple #2
0
 def test_v3_placement_unit_in_unit(self):
     cs = changeset.ChangeSet({
         'services': {
             'wordpress': {
                 'charm': 'cs:utopic/wordpress-0',
                 'num_units': 1,
             },
             'django': {
                 'charm': 'cs:trusty/django-42',
                 'num_units': 1,
                 'to': 'wordpress=0',
             },
         },
     })
     cs.services_added = {
         'django': 'deploy-1',
         'wordpress': 'deploy-42',
     }
     handler = changeset.handle_units(cs)
     self.assertIsNone(handler)
     self.assertEqual([
         {
             'id': 'addUnit-0',
             'method': 'addUnit',
             'args': ['$deploy-1', '$addUnit-1'],
             'requires': ['deploy-1', 'addUnit-1'],
         },
         {
             'id': 'addUnit-1',
             'method': 'addUnit',
             'args': ['$deploy-42', None],
             'requires': ['deploy-42'],
         },
     ], cs.recv())
Exemple #3
0
 def setUp(self):
     self.cs = changeset.ChangeSet({
         'services': {},
         'machines': {},
         'relations': {},
         'series': 'trusty',
     })
Exemple #4
0
 def test_unit_in_new_machine_to_lxc_from_lxd_container(self):
     cs = changeset.ChangeSet({
         'services': {
             'django-new-lxd': {
                 'charm': 'cs:trusty/django-42',
                 'num_units': 1,
                 'to': 'lxd:new',
             },
         },
         'machines': {},
     })
     cs.services_added = {
         'django-new-lxd': 'deploy-4',
     }
     handler = changeset.handle_units(cs)
     self.assertIsNone(handler)
     self.assertEqual([
         {
             'id': 'addMachines-1',
             'method': 'addMachines',
             'args': [{
                 'containerType': 'lxc'
             }],
             'requires': [],
         },
         {
             'id': 'addUnit-0',
             'method': 'addUnit',
             'args': ['$deploy-4', '$addMachines-1'],
             'requires': ['deploy-4', 'addMachines-1'],
         },
     ], cs.recv())
Exemple #5
0
 def test_handler(self):
     cs = changeset.ChangeSet({
         'services': {
             'django': {
                 'charm': 'cs:trusty/django-42',
             },
             'mysql': {
                 'charm': 'cs:utopic/mysql-47',
             },
         },
         'relations': [
             ['mysql:foo', 'django:bar'],
         ],
     })
     cs.services_added = {
         'django': 'deploy-1',
         'mysql': 'deploy-3',
     }
     handler = changeset.handle_relations(cs)
     self.assertEqual(changeset.handle_units, handler)
     self.assertEqual([{
         'id': 'addRelation-0',
         'method': 'addRelation',
         'args': ['$deploy-3:foo', '$deploy-1:bar'],
         'requires': ['deploy-3', 'deploy-1'],
     }], cs.recv())
Exemple #6
0
 def test_unit_in_preexisting_machine(self):
     cs = changeset.ChangeSet({
         'services': {
             'django-machine': {
                 'charm': 'cs:trusty/django-42',
                 'num_units': 1,
                 'to': '42',
             },
         },
         'machines': {
             42: {}
         },
     })
     cs.services_added = {
         'django-machine': 'deploy-3',
     }
     cs.machines_added = {
         '42': 'addMachines-42',
     }
     handler = changeset.handle_units(cs)
     self.assertIsNone(handler)
     self.assertEqual([
         {
             'id': 'addUnit-0',
             'method': 'addUnit',
             'args': ['$deploy-3', '$addMachines-42'],
             'requires': ['deploy-3', 'addMachines-42'],
         },
     ], cs.recv())
Exemple #7
0
 def test_none_machine(self):
     cs = changeset.ChangeSet({'machines': {42: None}})
     changeset.handle_machines(cs)
     self.assertEqual([{
         'id': 'addMachines-0',
         'method': 'addMachines',
         'args': [{
             'constraints': '',
             'series': ''
         }],
         'requires': [],
     }], cs.recv())
Exemple #8
0
 def test_unit_colocation_to_lxc_from_lxd_in_unit(self):
     cs = changeset.ChangeSet({
         'services': {
             'django-new': {
                 'charm': 'cs:trusty/django-42',
                 'num_units': 1,
             },
             'django-unit-lxd': {
                 'charm': 'cs:trusty/django-42',
                 'num_units': 1,
                 'to': 'lxd:django-new/0',
             },
         },
         'machines': {},
     })
     cs.services_added = {
         'django-new': 'deploy-1',
         'django-unit-lxd': 'deploy-5',
     }
     handler = changeset.handle_units(cs)
     self.assertIsNone(handler)
     self.maxDiff = None
     self.assertEqual([
         {
             'id': 'addUnit-0',
             'method': 'addUnit',
             'args': ['$deploy-1', None],
             'requires': ['deploy-1'],
         },
         {
             'id': 'addMachines-2',
             'method': 'addMachines',
             'args': [{
                 'containerType': 'lxc',
                 'parentId': '$addUnit-0',
             }],
             'requires': ['addUnit-0'],
         },
         {
             'id': 'addUnit-1',
             'method': 'addUnit',
             'args': ['$deploy-5', '$addMachines-2'],
             'requires': ['deploy-5', 'addMachines-2'],
         },
     ], cs.recv())
Exemple #9
0
 def test_unit_in_preexisting_machine_container(self):
     cs = changeset.ChangeSet({
         'services': {
             'django-machine-lxc': {
                 'charm': 'cs:trusty/django-42',
                 'num_units': 1,
                 'to': 'lxc:0',
             },
         },
         'machines': {
             0: {}
         },
     })
     cs.services_added = {
         'django-machine-lxc': 'deploy-6',
     }
     cs.machines_added = {
         '0': 'addMachines-47',
     }
     handler = changeset.handle_units(cs)
     self.assertIsNone(handler)
     self.assertEqual([
         {
             'id': 'addMachines-1',
             'method': 'addMachines',
             'args': [{
                 'containerType': 'lxc',
                 'parentId': '$addMachines-47',
             }],
             'requires': ['addMachines-47'],
         },
         {
             'id': 'addUnit-0',
             'method': 'addUnit',
             'args': ['$deploy-6', '$addMachines-1'],
             'requires': ['deploy-6', 'addMachines-1'],
         },
     ], cs.recv())
Exemple #10
0
 def test_v3_placement_unit_in_bootstrap_node(self):
     cs = changeset.ChangeSet({
         'services': {
             'django': {
                 'charm': 'cs:trusty/django-42',
                 'num_units': 1,
                 'to': '0',
             },
         },
     })
     cs.services_added = {
         'django': 'deploy-1',
     }
     handler = changeset.handle_units(cs)
     self.assertIsNone(handler)
     self.assertEqual([
         {
             'id': 'addUnit-0',
             'method': 'addUnit',
             'args': ['$deploy-1', '0'],
             'requires': ['deploy-1'],
         },
     ], cs.recv())
Exemple #11
0
 def test_placement_unit_in_container_in_service(self):
     cs = changeset.ChangeSet({
         'services': {
             'wordpress': {
                 'charm': 'cs:utopic/wordpress-0',
                 'num_units': 1,
             },
             'rails': {
                 'charm': 'cs:utopic/rails-0',
                 'num_units': 2,
             },
             'django': {
                 'charm': 'cs:trusty/django-42',
                 'num_units': 3,
                 'to': ['lxc:wordpress', 'kvm:rails'],
             },
         },
         'machines': {},
     })
     cs.services_added = {
         'django': 'deploy-1',
         'wordpress': 'deploy-42',
         'rails': 'deploy-47',
     }
     handler = changeset.handle_units(cs)
     self.assertIsNone(handler)
     self.assertEqual([
         {
             'id': 'addMachines-6',
             'method': 'addMachines',
             'args': [{
                 'containerType': 'lxc',
                 'parentId': '$addUnit-5',
             }],
             'requires': ['addUnit-5'],
         },
         {
             'id': 'addUnit-0',
             'method': 'addUnit',
             'args': ['$deploy-1', '$addMachines-6'],
             'requires': ['deploy-1', 'addMachines-6'],
         },
         {
             'id': 'addMachines-7',
             'method': 'addMachines',
             'args': [{
                 'containerType': 'kvm',
                 'parentId': '$addUnit-3',
             }],
             'requires': ['addUnit-3'],
         },
         {
             'id': 'addUnit-1',
             'method': 'addUnit',
             'args': ['$deploy-1', '$addMachines-7'],
             'requires': ['deploy-1', 'addMachines-7'],
         },
         {
             'id': 'addMachines-8',
             'method': 'addMachines',
             'args': [{
                 'containerType': 'kvm',
                 'parentId': '$addUnit-4',
             }],
             'requires': ['addUnit-4'],
         },
         {
             'id': 'addUnit-2',
             'method': 'addUnit',
             'args': ['$deploy-1', '$addMachines-8'],
             'requires': ['deploy-1', 'addMachines-8'],
         },
         {
             'id': 'addUnit-3',
             'method': 'addUnit',
             'args': ['$deploy-47', None],
             'requires': ['deploy-47'],
         },
         {
             'id': 'addUnit-4',
             'method': 'addUnit',
             'args': ['$deploy-47', None],
             'requires': ['deploy-47'],
         },
         {
             'id': 'addUnit-5',
             'method': 'addUnit',
             'args': ['$deploy-42', None],
             'requires': ['deploy-42'],
         },
     ], cs.recv())
Exemple #12
0
 def test_handler(self):
     cs = changeset.ChangeSet({
         # Use an ordered dict so that changes' ids can be predicted
         # deterministically.
         'services': {
             'django': {
                 'charm': 'cs:trusty/django-42',
             },
             'mysql-master': {
                 'charm': 'cs:utopic/mysql-47',
                 'expose': False,
                 'constraints': 'cpu-cores=4 mem=42G',
             },
             'mysql-slave': {
                 'charm': 'cs:utopic/mysql-47',
                 'options': {
                     'key1': 'value1',
                     'key2': 'value2',
                 },
                 'storage': {
                     'data': 'ebs,10G',
                     'cache': 'ebs-ssd',
                 },
             },
             'haproxy': {
                 'charm': 'cs:trusty/haproxy-5',
                 'expose': True,
                 'annotations': {
                     'gui-x': 100,
                     'gui-y': 100,
                 },
             },
         }
     })
     handler = changeset.handle_services(cs)
     self.assertEqual(changeset.handle_machines, handler)
     self.assertEqual([
         {
             'id': 'addCharm-0',
             'method': 'addCharm',
             'args': ['cs:trusty/django-42'],
             'requires': [],
         },
         {
             'id': 'deploy-1',
             'method': 'deploy',
             'args': ['$addCharm-0', 'django', {}, '', {}],
             'requires': ['addCharm-0'],
         },
         {
             'id': 'addCharm-2',
             'method': 'addCharm',
             'args': ['cs:trusty/haproxy-5'],
             'requires': [],
         },
         {
             'id': 'deploy-3',
             'method': 'deploy',
             'args': ['$addCharm-2', 'haproxy', {}, '', {}],
             'requires': ['addCharm-2'],
         },
         {
             'id': 'expose-4',
             'method': 'expose',
             'args': ['$deploy-3'],
             'requires': ['deploy-3'],
         },
         {
             'id': 'setAnnotations-5',
             'method': 'setAnnotations',
             'args': [
                 '$deploy-3',
                 'service',
                 {
                     'gui-x': 100,
                     'gui-y': 100
                 },
             ],
             'requires': ['deploy-3'],
         },
         {
             'id': 'addCharm-6',
             'method': 'addCharm',
             'args': ['cs:utopic/mysql-47'],
             'requires': [],
         },
         {
             'id':
             'deploy-7',
             'method':
             'deploy',
             'args': [
                 '$addCharm-6',
                 'mysql-master',
                 {},
                 'cpu-cores=4 mem=42G',
                 {},
             ],
             'requires': ['addCharm-6'],
         },
         {
             'id':
             'deploy-8',
             'method':
             'deploy',
             'args': [
                 '$addCharm-6',
                 'mysql-slave',
                 {
                     'key1': 'value1',
                     'key2': 'value2'
                 },
                 '',
                 {
                     'data': 'ebs,10G',
                     'cache': 'ebs-ssd'
                 },
             ],
             'requires': ['addCharm-6'],
         },
     ], cs.recv())
Exemple #13
0
 def test_handler(self):
     cs = changeset.ChangeSet({
         # Use an ordered dict so that changes' ids can be predicted
         # deterministically.
         'machines': {
             '1': {
                 'series': 'vivid'
             },
             '2': {},
             '42': {
                 'constraints': {
                     'cpu-cores': 4
                 }
             },
             '23': {
                 'annotations': {
                     'foo': 'bar'
                 }
             },
         }
     })
     handler = changeset.handle_machines(cs)
     self.assertEqual(changeset.handle_relations, handler)
     self.assertEqual([
         {
             'id': 'addMachines-0',
             'method': 'addMachines',
             'args': [{
                 'constraints': '',
                 'series': 'vivid'
             }],
             'requires': [],
         },
         {
             'id': 'addMachines-1',
             'method': 'addMachines',
             'args': [{
                 'constraints': '',
                 'series': ''
             }],
             'requires': [],
         },
         {
             'id': 'addMachines-2',
             'method': 'addMachines',
             'args': [{
                 'constraints': '',
                 'series': ''
             }],
             'requires': [],
         },
         {
             'id': 'setAnnotations-3',
             'method': 'setAnnotations',
             'args': [
                 '$addMachines-2',
                 'machine',
                 {
                     'foo': 'bar'
                 },
             ],
             'requires': ['addMachines-2'],
         },
         {
             'id': 'addMachines-4',
             'method': 'addMachines',
             'args': [{
                 'constraints': {
                     'cpu-cores': 4
                 },
                 'series': ''
             }],
             'requires': [],
         },
     ], cs.recv())
Exemple #14
0
 def test_subordinate_service(self):
     cs = changeset.ChangeSet({'services': {'logger': {'charm': 'logger'}}})
     changeset.handle_units(cs)
     self.assertEqual([], cs.recv())
Exemple #15
0
 def test_no_units(self):
     cs = changeset.ChangeSet({'services': {}})
     changeset.handle_units(cs)
     self.assertEqual([], cs.recv())
Exemple #16
0
 def test_handler(self):
     cs = changeset.ChangeSet({
         'services': {
             'django': {
                 'charm': 'cs:trusty/django-42',
                 'num_units': 1,
                 'to': '42',
             },
             'mysql': {
                 'charm': 'cs:utopic/mysql-47',
                 'num_units': 0,
             },
             'haproxy': {
                 'charm': 'cs:precise/haproxy-0',
                 'num_units': 2,
             },
             'rails': {
                 'charm': 'cs:precise/rails-1',
                 'num_units': 1,
                 'to': ['0'],
             },
         },
         'machines': {
             0: {},
             42: {}
         },
     })
     cs.services_added = {
         'django': 'deploy-1',
         'mysql': 'deploy-2',
         'haproxy': 'deploy-3',
         'rails': 'deploy-4',
     }
     cs.machines_added = {
         '0': 'addMachines-0',
         '42': 'addMachines-42',
     }
     handler = changeset.handle_units(cs)
     self.assertIsNone(handler)
     self.assertEqual([
         {
             'id': 'addUnit-0',
             'method': 'addUnit',
             'args': ['$deploy-1', '$addMachines-42'],
             'requires': ['deploy-1', 'addMachines-42'],
         },
         {
             'id': 'addUnit-1',
             'method': 'addUnit',
             'args': ['$deploy-3', None],
             'requires': ['deploy-3'],
         },
         {
             'id': 'addUnit-2',
             'method': 'addUnit',
             'args': ['$deploy-3', None],
             'requires': ['deploy-3'],
         },
         {
             'id': 'addUnit-3',
             'method': 'addUnit',
             'args': ['$deploy-4', '$addMachines-0'],
             'requires': ['deploy-4', 'addMachines-0'],
         },
     ], cs.recv())
Exemple #17
0
 def test_no_relations(self):
     cs = changeset.ChangeSet({'relations': []})
     changeset.handle_relations(cs)
     self.assertEqual([], cs.recv())
Exemple #18
0
 def test_is_legacy_bundle(self):
     self.assertFalse(self.cs.is_legacy_bundle())
     cs = changeset.ChangeSet({'services': {}})
     self.assertTrue(cs.is_legacy_bundle())