def get_or_create_healthcheck(user, healthcheck_expect, healthcheck_type, healthcheck_request, healthcheck_destination, identifier=''): try: # Query HealthCheck table for one equal this if identifier == '': hc = Healthcheck.objects.get(healthcheck_expect=healthcheck_expect, healthcheck_type=healthcheck_type, healthcheck_request=healthcheck_request, destination=healthcheck_destination) else: hc = Healthcheck.objects.get(identifier=identifier, healthcheck_expect=healthcheck_expect, healthcheck_type=healthcheck_type, healthcheck_request=healthcheck_request, destination=healthcheck_destination) # Else, add a new one except ObjectDoesNotExist: hc = Healthcheck(identifier=identifier, healthcheck_type=healthcheck_type, healthcheck_request=healthcheck_request, healthcheck_expect=healthcheck_expect, destination=healthcheck_destination) hc.save() # Get the fisrt occureny and warn if redundant HCs are present except MultipleObjectsReturned: log.warning( "Multiple healthcheck entries found for the given parameters") if identifier == '': hc = Healthcheck.objects.filter(healthcheck_expect=healthcheck_expect, healthcheck_type=healthcheck_type, healthcheck_request=healthcheck_request, destination=healthcheck_destination).order_by('id')[0] else: hc = Healthcheck.objects.filter(identifier=identifier, healthcheck_expect=healthcheck_expect, healthcheck_type=healthcheck_type, healthcheck_request=healthcheck_request, destination=healthcheck_destination).order_by('id')[0] return hc
def get_or_create_healthcheck(user, healthcheck_expect, healthcheck_type, healthcheck_request, healthcheck_destination, identifier=''): try: # Query HealthCheck table for one equal this if identifier == '': hc = Healthcheck.objects.get( healthcheck_expect=healthcheck_expect, healthcheck_type=healthcheck_type, healthcheck_request=healthcheck_request, destination=healthcheck_destination) else: hc = Healthcheck.objects.get( identifier=identifier, healthcheck_expect=healthcheck_expect, healthcheck_type=healthcheck_type, healthcheck_request=healthcheck_request, destination=healthcheck_destination) # Else, add a new one except ObjectDoesNotExist: hc = Healthcheck(identifier=identifier, healthcheck_type=healthcheck_type, healthcheck_request=healthcheck_request, healthcheck_expect=healthcheck_expect, destination=healthcheck_destination) hc.save() # Get the fisrt occureny and warn if redundant HCs are present except MultipleObjectsReturned: log.warning( "Multiple healthcheck entries found for the given parameters") if identifier == '': hc = Healthcheck.objects.filter( healthcheck_expect=healthcheck_expect, healthcheck_type=healthcheck_type, healthcheck_request=healthcheck_request, destination=healthcheck_destination).order_by('id')[0] else: hc = Healthcheck.objects.filter( identifier=identifier, healthcheck_expect=healthcheck_expect, healthcheck_type=healthcheck_type, healthcheck_request=healthcheck_request, destination=healthcheck_destination).order_by('id')[0] return hc
def test_task_id_create_in_delete_deploy_one_server_pool_success( self, *args): """Test success of id task generate for server pool delete deploy success.""" mock_get_user = args[1] mock_get_pool = args[2] mock_delete_real_pool = args[3] user = Usuario(id=1, nome='test') divisaodc = DivisaoDc(id=1, nome='test') amblog = AmbienteLogico(id=1, nome='test') gl3 = GrupoL3(id=1, nome='test') ambiente = Ambiente(id=1, grupo_l3=gl3, divisao_dc=divisaodc, ambiente_logico=amblog) optionpool = OptionPool(id=1, type='test', name='test') healthcheck = Healthcheck(id=1) pool = ServerPool(id=1, identifier='test', environment=ambiente, servicedownaction=optionpool, healthcheck=healthcheck) pool_serializer = serializers.PoolV3Serializer(pool) mock_delete_real_pool.return_value = pool mock_get_pool.return_value = pool mock_get_user.return_value = user undeploy(pool.id, user.id) mock_delete_real_pool.assert_called_with([pool_serializer.data], user)
def test_save_pool_given_(self): self.mock_get_service_down_action_by_environment( OptionPool(name='none')) self.mock_filter_server_pool_by_identifier(None) self.mock_get_or_create_healthcheck(Healthcheck()) save_pool_mock = self.mock_save_server_pool( (self.create_server_pool_model(), None)) prepare_to_save_reals_mock = self.mock_prepare_to_save_reals( [self.create_real_dict()]) reals_can_associate_server_pool_mock = self.mock_reals_can_associate_server_pool( None) save_server_pool_member_mock = self.mock_save_server_pool_member( [self.create_pool_member()]) response = self.client.post( '/api/pools/save/', self.load_pool_json('pool.json'), format='json') self.assertEquals(201, response.status_code) self.assertEquals('pool_1', response.data.get( 'server_pool').get('identifier')) self.assertEquals(8080, response.data.get( 'server_pool').get('default_port')) self.assertEquals(1, len(response.data.get('server_pool_members'))) self.assertTrue(save_pool_mock.called) self.assertTrue(prepare_to_save_reals_mock.called) self.assertTrue(reals_can_associate_server_pool_mock.called) self.assertTrue(save_server_pool_member_mock.called)
def insert(request): try: # TODO: ADD VALIDATION healthcheck_type = request.DATA.get('healthcheck_type') healthcheck_request = request.DATA.get('healthcheck_request') healthcheck_expect = request.DATA.get('healthcheck_expect') old_healthcheck_id = request.DATA.get('old_healthcheck_id') try: # Query HealthCheck table for one equal this hc_check = Healthcheck.objects.get( healthcheck_expect=healthcheck_expect, healthcheck_type=healthcheck_type, healthcheck_request=healthcheck_request) # If a HealthCheck like this already exists, return it hc_serializer = HealthcheckSerializer(hc_check, many=False) # Else, add a new one except ObjectDoesNotExist: hc = Healthcheck( identifier='', healthcheck_type=healthcheck_type, healthcheck_request=healthcheck_request, healthcheck_expect=healthcheck_expect, destination='' ) hc.save(request.user) # Check if someone is using the old healthcheck # If not, delete it to keep the database clean if old_healthcheck_id is not None: pools_using_healthcheck = ServerPool.objects.filter( healthcheck=old_healthcheck_id).count() if pools_using_healthcheck == 0: Healthcheck.objects.filter(id=old_healthcheck_id).delete() hc_serializer = HealthcheckSerializer(hc, many=False) return Response(hc_serializer.data) except Exception, exception: log.error(exception) raise api_exceptions.NetworkAPIException()
def insert(request): try: # TODO: ADD VALIDATION healthcheck_type = request.DATA.get('healthcheck_type') healthcheck_request = request.DATA.get('healthcheck_request') healthcheck_expect = request.DATA.get('healthcheck_expect') old_healthcheck_id = request.DATA.get('old_healthcheck_id') try: #Query HealthCheck table for one equal this hc_check = Healthcheck.objects.get(healthcheck_expect=healthcheck_expect, healthcheck_type=healthcheck_type, healthcheck_request=healthcheck_request) #If a HealthCheck like this already exists, return it hc_serializer = HealthcheckSerializer(hc_check, many=False) #Else, add a new one except ObjectDoesNotExist: hc = Healthcheck( identifier='', healthcheck_type=healthcheck_type, healthcheck_request=healthcheck_request, healthcheck_expect=healthcheck_expect, destination='' ) hc.save(request.user) #Check if someone is using the old healthcheck #If not, delete it to keep the database clean if old_healthcheck_id is not None: pools_using_healthcheck = ServerPool.objects.filter(healthcheck=old_healthcheck_id).count() if pools_using_healthcheck == 0: Healthcheck.objects.filter(id=old_healthcheck_id).delete() hc_serializer = HealthcheckSerializer(hc, many=False) return Response(hc_serializer.data) except Exception, exception: log.error(exception) raise api_exceptions.NetworkAPIException()
def _get_healthcheck(healthcheck_obj): """Get or creates a healthcheck""" healthcheck = { 'identifier': healthcheck_obj['identifier'], 'healthcheck_expect': healthcheck_obj['healthcheck_expect'], 'healthcheck_type': healthcheck_obj['healthcheck_type'], 'healthcheck_request': healthcheck_obj['healthcheck_request'], 'destination': healthcheck_obj['destination'] } try: hc = Healthcheck.objects.get(**healthcheck) except ObjectDoesNotExist: hc = Healthcheck(**healthcheck) hc.save() return hc
def create_health_check(self, id=0, expect='WORKING', type='HTTP', req='/healthcheck', dest='*:*', ident='1'): return Healthcheck(id=id, healthcheck_expect=expect, healthcheck_type=type, healthcheck_request=req, destination=dest, identifier=ident)
def test_save_pool_given_fail_on_change_pool_limits(self): self.mock_get_service_down_action_by_environment( OptionPool(name='none')) self.mock_filter_server_pool_by_identifier(None) self.mock_get_or_create_healthcheck(Healthcheck()) save_pool_mock = self.mock_save_server_pool( ScriptAlterLimitPoolDiffMembersException()) response = self.client.post( '/api/pools/save/', self.load_pool_json('pool.json'), format='json') self.assertEquals(400, response.status_code) self.assertEquals('Failed to change limits for pool. Members limit differs from pool default limit Set all members with the same default limit before changing default pool limit.', response.data.get('detail')) self.assertTrue(save_pool_mock.called)
def test_save_pool_given_fail_on_create_service_down_action(self): self.mock_get_service_down_action_by_environment( OptionPool(name='none')) self.mock_filter_server_pool_by_identifier(None) self.mock_get_or_create_healthcheck(Healthcheck()) save_pool_mock = self.mock_save_server_pool( ScriptAlterServiceDownActionException()) response = self.client.post( '/api/pools/save/', self.load_pool_json('pool.json'), format='json') self.assertEquals(400, response.status_code) self.assertEquals( 'Failed to execute service-down-action script for pool.', response.data.get('detail')) self.assertTrue(save_pool_mock.called)
def test_save_pool_given_pool_associated_with_one_or_more_pool_members(self): self.mock_get_service_down_action_by_environment( OptionPool(name='none')) self.mock_filter_server_pool_by_identifier(None) self.mock_get_or_create_healthcheck(Healthcheck()) save_pool_mock = self.mock_save_server_pool( UpdateEnvironmentServerPoolMemberException()) response = self.client.post( '/api/pools/save/', self.load_pool_json('pool.json'), format='json') self.assertEquals(400, response.status_code) self.assertEquals( 'Ambiente nao pode ser alterado pois o server pool esta associado com um ou mais server pool member.', response.data.get('detail')) self.assertTrue(save_pool_mock.called)
def test_save_pool_given_pool_already_created_on_equipment(self): self.mock_get_service_down_action_by_environment( OptionPool(name='none')) self.mock_filter_server_pool_by_identifier(None) self.mock_get_or_create_healthcheck(Healthcheck()) save_pool_mock = self.mock_save_server_pool( UpdateEnvironmentPoolCreatedException()) response = self.client.post( '/api/pools/save/', self.load_pool_json('pool.json'), format='json') self.assertEquals(400, response.status_code) self.assertEquals( 'Ambiente nao pode ser alterado pois o server pool ja esta criado no equipamento.', response.data.get('detail')) self.assertTrue(save_pool_mock.called)
def test_save_pool_given_pool_already_having_an_identifier_saved(self): self.mock_get_service_down_action_by_environment( OptionPool(name='none')) self.mock_filter_server_pool_by_identifier(None) self.mock_get_or_create_healthcheck(Healthcheck()) save_pool_mock = self.mock_save_server_pool( CreatedPoolIdentifierException()) response = self.client.post( '/api/pools/save/', self.load_pool_json('pool.json'), format='json') self.assertEquals(400, response.status_code) self.assertEquals( 'Pool already created. Cannot change Identifier.', response.data.get('detail')) self.assertTrue(save_pool_mock.called)
def test_save_pool_given_invalid_real_data(self): self.mock_get_service_down_action_by_environment( OptionPool(name='none')) self.mock_filter_server_pool_by_identifier(None) self.mock_get_or_create_healthcheck(Healthcheck()) save_pool_mock = self.mock_save_server_pool( (self.create_server_pool_model(), None)) prepare_to_save_reals_mock = self.mock_prepare_to_save_reals( InvalidRealPoolException()) response = self.client.post( '/api/pools/save/', self.load_pool_json('pool.json'), format='json') self.assertEquals(400, response.status_code) self.assertEquals('Parametros invalidos do real.', response.data.get('detail')) self.assertTrue(save_pool_mock.called) self.assertTrue(prepare_to_save_reals_mock.called)
def test_update_pool_fields(self): pool = ServerPool() default_port = 8080 env = Ambiente(id=1) identifier = 'pool_1' old_healthcheck = Healthcheck() old_lb_method = 'round-robin' old_maxconn = 50 save_pool_mock = self.mock_save_pool() update_pool_fields(default_port, env, identifier, old_healthcheck, old_lb_method, old_maxconn, pool, self.user) save_pool_mock.assert_calls(call(), call()) self.assertEquals(default_port, pool.default_port) self.assertEquals(env, pool.environment) self.assertEquals(identifier, pool.identifier) self.assertEquals(old_healthcheck, pool.healthcheck) self.assertEquals(old_lb_method, pool.lb_method)
def test_save_pool_given_environment_not_linked_to_vip_environment(self): self.mock_get_service_down_action_by_environment( OptionPool(name='none')) self.mock_filter_server_pool_by_identifier(None) self.mock_get_or_create_healthcheck(Healthcheck()) save_pool_mock = self.mock_save_server_pool( (self.create_server_pool_model(), None)) prepare_to_save_reals_mock = self.mock_prepare_to_save_reals( [self.create_real_dict()]) reals_can_associate_server_pool_mock = self.mock_reals_can_associate_server_pool( EnvironmentEnvironmentVipNotBoundedException()) response = self.client.post( '/api/pools/save/', self.load_pool_json('pool.json'), format='json') self.assertEquals(400, response.status_code) self.assertEquals( 'There is no link between environment and environment vip.', response.data.get('detail')) self.assertTrue(save_pool_mock.called) self.assertTrue(prepare_to_save_reals_mock.called) self.assertTrue(reals_can_associate_server_pool_mock.called)
def test_save_pool_given_script_error_change_pool_priority(self): self.mock_get_service_down_action_by_environment( OptionPool(name='none')) self.mock_filter_server_pool_by_identifier(None) self.mock_get_or_create_healthcheck(Healthcheck()) save_pool_mock = self.mock_save_server_pool( (self.create_server_pool_model(), None)) prepare_to_save_reals_mock = self.mock_prepare_to_save_reals( [self.create_real_dict()]) reals_can_associate_server_pool_mock = self.mock_reals_can_associate_server_pool( None) save_server_pool_member_mock = self.mock_save_server_pool_member( ScriptAlterPriorityPoolMembersException()) response = self.client.post( '/api/pools/save/', self.load_pool_json('pool.json'), format='json') self.assertEquals(400, response.status_code) self.assertEquals( 'Failed to execute priority script for pool.', response.data.get('detail')) self.assertTrue(save_pool_mock.called) self.assertTrue(prepare_to_save_reals_mock.called) self.assertTrue(reals_can_associate_server_pool_mock.called) self.assertTrue(save_server_pool_member_mock.called)