~hopem/charm-helpers/backport-lp1385162

« back to all changes in this revision

Viewing changes to tests/contrib/openstack/test_os_contexts.py

  • Committer: james.page at ubuntu
  • Date: 2014-10-01 22:05:51 UTC
  • mfrom: (212.3.25 charm-helpers)
  • Revision ID: james.page@ubuntu.com-20141001220551-vpxh3jd9ktrixwjj
[jamespage,r=gnuoy] Rework haproxy helpers to deal with multiple https backends

Show diffs side-by-side

added added

removed removed

Lines of Context:
371
371
    'https',
372
372
    'get_address_in_network',
373
373
    'is_address_in_network',
 
374
    'get_netmask_for_address',
374
375
    'local_unit',
375
376
    'get_ipv6_addr',
376
377
    'format_ipv6_addr',
430
431
 
431
432
    def test_shared_db_context_with_data_and_access_net_mismatch(self):
432
433
        '''Mismatch between hostname and hostname for access net - defers execution'''
433
 
        relation = FakeRelation(relation_data=SHARED_DB_RELATION_ACCESS_NETWORK)
 
434
        relation = FakeRelation(
 
435
            relation_data=SHARED_DB_RELATION_ACCESS_NETWORK)
434
436
        self.relation_get.side_effect = relation.get
435
437
        self.get_address_in_network.return_value = '10.5.5.1'
436
438
        self.config.side_effect = fake_config(SHARED_DB_CONFIG)
437
439
        shared_db = context.SharedDBContext()
438
440
        result = shared_db()
439
441
        self.assertEquals(result, {})
440
 
        self.relation_set.assert_called_with(relation_settings={'hostname': '10.5.5.1'})
 
442
        self.relation_set.assert_called_with(
 
443
            relation_settings={
 
444
                'hostname': '10.5.5.1'})
441
445
 
442
446
    def test_shared_db_context_with_data_and_access_net_match(self):
443
447
        '''Correctly set hostname for access net returns complete context'''
444
 
        relation = FakeRelation(relation_data=SHARED_DB_RELATION_ACCESS_NETWORK)
 
448
        relation = FakeRelation(
 
449
            relation_data=SHARED_DB_RELATION_ACCESS_NETWORK)
445
450
        self.relation_get.side_effect = relation.get
446
451
        self.get_address_in_network.return_value = 'bar'
447
452
        self.config.side_effect = fake_config(SHARED_DB_CONFIG)
954
959
        self.relation_ids.side_effect = relation.relation_ids
955
960
        self.relation_get.side_effect = relation.get
956
961
        self.related_units.side_effect = relation.relation_units
957
 
        self.get_address_in_network.return_value = 'cluster-peer0.localnet'
 
962
        self.get_address_in_network.return_value = None
 
963
        self.get_netmask_for_address.return_value = '255.255.0.0'
958
964
        self.config.return_value = False
 
965
        self.maxDiff = None
959
966
        haproxy = context.HAProxyContext()
960
967
        with patch_open() as (_open, _file):
961
968
            result = haproxy()
962
969
        ex = {
963
 
            'units': {
964
 
                'peer-0': 'cluster-peer0.localnet',
965
 
                'peer-1': 'cluster-peer1.localnet',
966
 
                'peer-2': 'cluster-peer2.localnet',
 
970
            'frontends': {
 
971
                'cluster-peer0.localnet': {
 
972
                    'network': 'cluster-peer0.localnet/255.255.0.0',
 
973
                    'backends': {
 
974
                        'peer-0': 'cluster-peer0.localnet',
 
975
                        'peer-1': 'cluster-peer1.localnet',
 
976
                        'peer-2': 'cluster-peer2.localnet',
 
977
                    }
 
978
                }
967
979
            },
968
 
 
969
980
            'local_host': '127.0.0.1',
970
981
            'haproxy_host': '0.0.0.0',
971
982
            'stat_port': ':8888',
996
1007
        self.relation_ids.side_effect = relation.relation_ids
997
1008
        self.relation_get.side_effect = relation.get
998
1009
        self.related_units.side_effect = relation.relation_units
999
 
        self.get_address_in_network.return_value = 'cluster-peer0.localnet'
 
1010
        self.get_address_in_network.return_value = None
 
1011
        self.get_netmask_for_address.return_value = '255.255.0.0'
 
1012
        self.config.return_value = False
 
1013
        self.maxDiff = None
1000
1014
        c = fake_config(HAPROXY_CONFIG)
1001
1015
        c.data['prefer-ipv6'] = False
1002
1016
        self.config.side_effect = c
1004
1018
        with patch_open() as (_open, _file):
1005
1019
            result = haproxy()
1006
1020
        ex = {
1007
 
            'units': {
1008
 
                'peer-0': 'cluster-peer0.localnet',
1009
 
                'peer-1': 'cluster-peer1.localnet',
1010
 
                'peer-2': 'cluster-peer2.localnet',
 
1021
            'frontends': {
 
1022
                'cluster-peer0.localnet': {
 
1023
                    'network': 'cluster-peer0.localnet/255.255.0.0',
 
1024
                    'backends': {
 
1025
                        'peer-0': 'cluster-peer0.localnet',
 
1026
                        'peer-1': 'cluster-peer1.localnet',
 
1027
                        'peer-2': 'cluster-peer2.localnet',
 
1028
                    }
 
1029
                }
1011
1030
            },
1012
 
 
1013
1031
            'local_host': '127.0.0.1',
 
1032
            'haproxy_host': '0.0.0.0',
 
1033
            'stat_port': ':8888',
 
1034
            'haproxy_client_timeout': 50000,
1014
1035
            'haproxy_server_timeout': 50000,
1015
 
            'haproxy_client_timeout': 50000,
 
1036
        }
 
1037
        # the context gets generated.
 
1038
        self.assertEquals(ex, result)
 
1039
        # and /etc/default/haproxy is updated.
 
1040
        self.assertEquals(_file.write.call_args_list,
 
1041
                          [call('ENABLED=1\n')])
 
1042
 
 
1043
    @patch('charmhelpers.contrib.openstack.context.unit_get')
 
1044
    @patch('charmhelpers.contrib.openstack.context.local_unit')
 
1045
    def test_haproxy_context_with_data_multinet(self, local_unit, unit_get):
 
1046
        '''Test haproxy context with all relation data for network splits'''
 
1047
        cluster_relation = {
 
1048
            'cluster:0': {
 
1049
                'peer/1': {
 
1050
                    'private-address': 'cluster-peer1.localnet',
 
1051
                    'admin-address': 'cluster-peer1.admin',
 
1052
                    'internal-address': 'cluster-peer1.internal',
 
1053
                    'public-address': 'cluster-peer1.public',
 
1054
                },
 
1055
                'peer/2': {
 
1056
                    'private-address': 'cluster-peer2.localnet',
 
1057
                    'admin-address': 'cluster-peer2.admin',
 
1058
                    'internal-address': 'cluster-peer2.internal',
 
1059
                    'public-address': 'cluster-peer2.public',
 
1060
                },
 
1061
            },
 
1062
        }
 
1063
        local_unit.return_value = 'peer/0'
 
1064
        unit_get.return_value = 'cluster-peer0.localnet'
 
1065
        relation = FakeRelation(cluster_relation)
 
1066
        self.relation_ids.side_effect = relation.relation_ids
 
1067
        self.relation_get.side_effect = relation.get
 
1068
        self.related_units.side_effect = relation.relation_units
 
1069
        self.get_address_in_network.side_effect = [
 
1070
            'cluster-peer0.admin',
 
1071
            'cluster-peer0.internal',
 
1072
            'cluster-peer0.public'
 
1073
        ]
 
1074
        self.get_netmask_for_address.return_value = '255.255.0.0'
 
1075
        self.config.return_value = False
 
1076
        self.maxDiff = None
 
1077
        haproxy = context.HAProxyContext()
 
1078
        with patch_open() as (_open, _file):
 
1079
            result = haproxy()
 
1080
        ex = {
 
1081
            'frontends': {
 
1082
                'cluster-peer0.admin': {
 
1083
                    'network': 'cluster-peer0.admin/255.255.0.0',
 
1084
                    'backends': {
 
1085
                        'peer-0': 'cluster-peer0.admin',
 
1086
                        'peer-1': 'cluster-peer1.admin',
 
1087
                        'peer-2': 'cluster-peer2.admin',
 
1088
                    }
 
1089
                },
 
1090
                'cluster-peer0.internal': {
 
1091
                    'network': 'cluster-peer0.internal/255.255.0.0',
 
1092
                    'backends': {
 
1093
                        'peer-0': 'cluster-peer0.internal',
 
1094
                        'peer-1': 'cluster-peer1.internal',
 
1095
                        'peer-2': 'cluster-peer2.internal',
 
1096
                    }
 
1097
                },
 
1098
                'cluster-peer0.public': {
 
1099
                    'network': 'cluster-peer0.public/255.255.0.0',
 
1100
                    'backends': {
 
1101
                        'peer-0': 'cluster-peer0.public',
 
1102
                        'peer-1': 'cluster-peer1.public',
 
1103
                        'peer-2': 'cluster-peer2.public',
 
1104
                    }
 
1105
                }
 
1106
            },
 
1107
            'local_host': '127.0.0.1',
1016
1108
            'haproxy_host': '0.0.0.0',
1017
1109
            'stat_port': ':8888',
1018
1110
        }
1024
1116
 
1025
1117
    @patch('charmhelpers.contrib.openstack.context.unit_get')
1026
1118
    @patch('charmhelpers.contrib.openstack.context.local_unit')
1027
 
    @patch('charmhelpers.contrib.openstack.context.get_ipv6_addr')
1028
1119
    def test_haproxy_context_with_data_ipv6(
1029
 
            self, local_unit, unit_get, get_ipv6_addr):
1030
 
        '''Test haproxy context with all relation data'''
 
1120
            self, local_unit, unit_get):
 
1121
        '''Test haproxy context with all relation data ipv6'''
1031
1122
        cluster_relation = {
1032
1123
            'cluster:0': {
1033
1124
                'peer/1': {
1039
1130
            },
1040
1131
        }
1041
1132
 
1042
 
        unit_get.return_value = 'peer/0'
 
1133
        local_unit.return_value = 'peer/0'
1043
1134
        relation = FakeRelation(cluster_relation)
1044
1135
        self.relation_ids.side_effect = relation.relation_ids
1045
1136
        self.relation_get.side_effect = relation.get
1046
1137
        self.related_units.side_effect = relation.relation_units
1047
 
        self.get_address_in_network.return_value = 'cluster-peer0.localnet'
1048
 
        self.get_ipv6_addr.return_value = 'ip6-localhost'
 
1138
        self.get_address_in_network.return_value = None
 
1139
        self.get_netmask_for_address.return_value = \
 
1140
            'FFFF:FFFF:FFFF:FFFF:0000:0000:0000:0000'
 
1141
        self.get_ipv6_addr.return_value = ['cluster-peer0.localnet']
1049
1142
        c = fake_config(HAPROXY_CONFIG)
1050
1143
        c.data['prefer-ipv6'] = True
1051
1144
        self.config.side_effect = c
 
1145
        self.maxDiff = None
1052
1146
        haproxy = context.HAProxyContext()
1053
 
 
1054
1147
        with patch_open() as (_open, _file):
1055
1148
            result = haproxy()
1056
1149
        ex = {
1057
 
            'units': {
1058
 
                'peer-0': 'cluster-peer0.localnet',
1059
 
                'peer-1': 'cluster-peer1.localnet',
1060
 
                'peer-2': 'cluster-peer2.localnet',
 
1150
            'frontends': {
 
1151
                'cluster-peer0.localnet': {
 
1152
                    'network': 'cluster-peer0.localnet/'
 
1153
                    'FFFF:FFFF:FFFF:FFFF:0000:0000:0000:0000',
 
1154
                    'backends': {
 
1155
                        'peer-0': 'cluster-peer0.localnet',
 
1156
                        'peer-1': 'cluster-peer1.localnet',
 
1157
                        'peer-2': 'cluster-peer2.localnet',
 
1158
                    }
 
1159
                }
1061
1160
            },
1062
 
 
1063
1161
            'local_host': 'ip6-localhost',
1064
1162
            'haproxy_server_timeout': 50000,
1065
1163
            'haproxy_client_timeout': 50000,