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())
def test_unit_in_new_machine(self): cs = changeset.ChangeSet({ 'services': { 'django-new': { 'charm': 'cs:trusty/django-42', 'num_units': 1, 'to': 'new', }, }, 'machines': {}, }) cs.services_added = { 'django-new': 'deploy-1', } handler = changeset.handle_units(cs) self.assertIsNone(handler) self.assertEqual( [ { 'id': 'addMachines-1', 'method': 'addMachines', 'args': [{}], 'requires': [], }, { 'id': 'addUnit-0', 'method': 'addUnit', 'args': ['$deploy-1', '$addMachines-1'], 'requires': ['deploy-1', 'addMachines-1'], }, ], cs.recv())
def test_unit_in_preexisting_machine(self): cs = changeset.ChangeSet({ 'services': OrderedDict(( ('django-machine', { 'charm': 'cs:trusty/django-42', 'num_units': 1, 'to': '42', }), )), 'machines': {42: {}}, }) cs.services_added = { 'django-machine': 'addService-3', } cs.machines_added = { '42': 'addMachines-42', } handler = changeset.handle_units(cs) self.assertIsNone(handler) self.assertEqual( [ { 'id': 'addUnit-0', 'method': 'addUnit', 'args': ['$addService-3', 1, '$addMachines-42'], 'requires': ['addService-3', 'addMachines-42'], }, ], cs.recv())
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())
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())
def test_unit_in_new_machine_container(self): cs = changeset.ChangeSet({ 'services': OrderedDict(( ('django-new-lxc', { 'charm': 'cs:trusty/django-42', 'num_units': 1, 'to': 'lxc:new', }), )), 'machines': {}, }) cs.services_added = { 'django-new-lxc': 'addService-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': ['$addService-4', 1, '$addMachines-1'], 'requires': ['addService-4', 'addMachines-1'], }, ], cs.recv())
def test_v3_placement_unit_in_bootstrap_node(self): cs = changeset.ChangeSet({ 'services': OrderedDict(( ('django', { 'charm': 'cs:trusty/django-42', 'num_units': 1, 'to': '0', }), )), }) cs.services_added = { 'django': 'addService-1', } handler = changeset.handle_units(cs) self.assertIsNone(handler) self.assertEqual( [ { 'id': 'addUnit-0', 'method': 'addUnit', 'args': ['$addService-1', 1, '0'], 'requires': ['addService-1'], }, ], cs.recv())
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())
def test_placement_unit_in_service(self): cs = changeset.ChangeSet({ 'services': { 'wordpress': { 'charm': 'cs:utopic/wordpress-0', 'num_units': 3, }, 'django': { 'charm': 'cs:trusty/django-42', 'num_units': 2, 'to': ['wordpress'], }, }, 'machines': {}, }) 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-2'], 'requires': ['deploy-1', 'addUnit-2'], }, { 'id': 'addUnit-1', 'method': 'addUnit', 'args': ['$deploy-1', '$addUnit-3'], 'requires': ['deploy-1', 'addUnit-3'], }, { 'id': 'addUnit-2', 'method': 'addUnit', 'args': ['$deploy-42', None], 'requires': ['deploy-42'], }, { 'id': 'addUnit-3', 'method': 'addUnit', 'args': ['$deploy-42', None], 'requires': ['deploy-42'], }, { 'id': 'addUnit-4', 'method': 'addUnit', 'args': ['$deploy-42', None], 'requires': ['deploy-42'], }, ], cs.recv())
def test_unit_colocation_to_container_in_unit(self): cs = changeset.ChangeSet({ 'services': OrderedDict(( ('django-new', { 'charm': 'cs:trusty/django-42', 'num_units': 1, }), ('django-unit-lxc', { 'charm': 'cs:trusty/django-42', 'num_units': 1, 'to': 'lxc:django-new/0', }), )), 'machines': {}, }) cs.services_added = { 'django-new': 'addService-1', 'django-unit-lxc': 'addService-5', } handler = changeset.handle_units(cs) self.assertIsNone(handler) self.maxDiff = None self.assertEqual( [ { 'id': 'addUnit-0', 'method': 'addUnit', 'args': ['$addService-1', 1, None], 'requires': ['addService-1'], }, { 'id': 'addMachines-2', 'method': 'addMachines', 'args': [{ 'containerType': 'lxc', 'parentId': '$addUnit-0', }], 'requires': ['addUnit-0'], }, { 'id': 'addUnit-1', 'method': 'addUnit', 'args': ['$addService-5', 1, '$addMachines-2'], 'requires': ['addService-5', 'addMachines-2'], }, ], cs.recv())
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())
def test_v3_placement_unit_in_lxc_in_unit(self): cs = changeset.ChangeSet({ 'services': OrderedDict(( ('wordpress', { 'charm': 'cs:utopic/wordpress-0', 'num_units': 1, }), ('django', { 'charm': 'cs:trusty/django-42', 'num_units': 1, 'to': 'lxc:wordpress=0', }), )), }) cs.services_added = { 'django': 'addService-1', 'wordpress': 'addService-42', } handler = changeset.handle_units(cs) self.assertIsNone(handler) self.assertEqual( [ { 'id': 'addUnit-0', 'method': 'addUnit', 'args': ['$addService-42', 1, None], 'requires': ['addService-42'], }, { 'id': 'addMachines-2', 'method': 'addMachines', 'args': [{ 'containerType': 'lxc', 'parentId': '$addUnit-0', }], 'requires': ['addUnit-0'], }, { 'id': 'addUnit-1', 'method': 'addUnit', 'args': ['$addService-1', 1, '$addMachines-2'], 'requires': ['addService-1', 'addMachines-2'], }, ], cs.recv())
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())
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())
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())
def test_subordinate_service(self): cs = changeset.ChangeSet({'services': {'logger': {'charm': 'logger'}}}) changeset.handle_units(cs) self.assertEqual([], cs.recv())
def test_no_units(self): cs = changeset.ChangeSet({'services': {}}) changeset.handle_units(cs) self.assertEqual([], cs.recv())
def test_handler(self): cs = changeset.ChangeSet({ 'services': OrderedDict(( ('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': 'addService-1', 'mysql': 'addService-2', 'haproxy': 'addService-3', 'rails': 'addService-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': ['$addService-1', 1, '$addMachines-42'], 'requires': ['addService-1', 'addMachines-42'], }, { 'id': 'addUnit-1', 'method': 'addUnit', 'args': ['$addService-3', 1, None], 'requires': ['addService-3'], }, { 'id': 'addUnit-2', 'method': 'addUnit', 'args': ['$addService-3', 1, None], 'requires': ['addService-3'], }, { 'id': 'addUnit-3', 'method': 'addUnit', 'args': ['$addService-4', 1, '$addMachines-0'], 'requires': ['addService-4', 'addMachines-0'], }, ], cs.recv())
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())
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())
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())