def test_parser_inventario_ansible_grupo_var_duplicada( self, _, servidor_acesso, monkeypatch): dados_teste = DadosTeste() nome_grupo = dados_teste.get_nome_unico() nome_var = dados_teste.get_nome_unico() inventario = [({ 'agrupamento': dados_teste.get_random_word(), 'nuvem': dados_teste.get_random_word(), 'vms': [{ 'nome': dados_teste.get_nome_unico(), 'ansible': [{ 'grupo': nome_grupo, 'vars': [{ 'nome': nome_var, 'valor': dados_teste.get_random_word() }, { 'nome': nome_var, 'valor': dados_teste.get_random_word() }] }] }] }, 'inventario.yaml')] monkeypatch.setattr(ParserLocal, '_ParserLocal__carregar_yaml', lambda mock: inventario) parser_local = ParserLocal(None) status, msg = parser_local.get_inventario(servidor_acesso) assert status is False assert msg == f"Variável '{nome_var}' do grupo ansible '{nome_grupo}' " \ f"referenciada mais de uma vez na VM '{inventario[0][0]['vms'][0]['nome']}'."
def test_parser_inventario_vm_sem_rede(self, _, servidor_acesso, monkeypatch): dados_teste = DadosTeste() inventario = [({ 'agrupamento': dados_teste.get_random_word(), 'nuvem': dados_teste.get_random_word(), 'imagem_padrao': dados_teste.get_random_word(), 'qtde_cpu_padrao': randint(Base.CPU_MIN, Base.CPU_MAX), 'qtde_ram_mb_padrao': randint(Base.RAM_MIN, Base.RAM_MAX), 'vms': [{ 'nome': dados_teste.get_nome_unico() } for _ in range(randrange(1, Base.VMS_POR_TESTE_MAX))] }, 'inventario.yaml')] monkeypatch.setattr(ParserLocal, '_ParserLocal__carregar_yaml', lambda mock: inventario) parser_local = ParserLocal(None) status, msg = parser_local.get_inventario(servidor_acesso) assert status is False assert msg == f"VM {inventario[0][0]['vms'][0]['nome']}" \ ' deve ter exatamente uma rede principal.'
def test_parser_inventario_nome_vm_duplicado(self, _, servidor_acesso, monkeypatch): dados_teste = DadosTeste() nome_vm = dados_teste.get_nome_unico() inventario = [({ 'agrupamento': dados_teste.get_random_word(), 'nuvem': dados_teste.get_random_word(), 'imagem_padrao': dados_teste.get_random_word(), 'qtde_cpu_padrao': randint(Base.CPU_MIN, Base.CPU_MAX), 'qtde_ram_mb_padrao': randint(Base.RAM_MIN, Base.RAM_MAX), 'redes_padrao': [{ 'nome': dados_teste.get_random_word() } for _ in range(randrange(1, Base.REDES_POR_VM_MAX))], 'vms': [{ 'nome': nome_vm } for _ in range(randrange(2, Base.VMS_POR_TESTE_MAX))] }, 'inventario.yaml')] monkeypatch.setattr(ParserLocal, '_ParserLocal__carregar_yaml', lambda mock: inventario) parser_local = ParserLocal(None) status, msg = parser_local.get_inventario(servidor_acesso) assert status is False assert msg == f"VM {inventario[0][0]['vms'][0]['nome']}" \ ' referenciada mais de uma vez no inventário.'
def test_parser_inventario_ansible_var_invalida(self, _, servidor_acesso, monkeypatch): dados_teste = DadosTeste() inventario = [({ 'agrupamento': dados_teste.get_random_word(), 'nuvem': dados_teste.get_random_word(), 'vms': [{ 'nome': dados_teste.get_nome_unico(), 'ansible': [{ 'grupo': dados_teste.get_random_word(), 'vars': [{ 'nome': '' }] }] }] }, 'inventario.yaml')] monkeypatch.setattr(ParserLocal, '_ParserLocal__carregar_yaml', lambda mock: inventario) parser_local = ParserLocal(None) status, msg = parser_local.get_inventario(servidor_acesso) assert status is False assert "vms.0.ansible.0.vars.0.nome: '' is not a caracteres alfabéticos" in msg assert 'vms.0.ansible.0.vars.0.valor: Required field missing' in msg
def test_parser_inventario_vms_com_regiao_invalida(self, _, servidor_acesso, monkeypatch): dados_teste = DadosTeste() inventario = [({ 'agrupamento': dados_teste.get_random_word(), 'nuvem': dados_teste.get_random_word(), 'imagem_padrao': dados_teste.get_random_word(), 'qtde_cpu_padrao': randint(Base.CPU_MIN, Base.CPU_MAX), 'qtde_ram_mb_padrao': randint(Base.RAM_MIN, Base.RAM_MAX), 'redes_padrao': [{ 'nome': dados_teste.get_nome_unico(), 'principal': num_iter == 0, } for num_iter in range(randrange(1, Base.REDES_POR_VM_MAX))], 'vms': [{ 'nome': dados_teste.get_nome_unico(), 'regiao': DadosTeste.get_regiao_vm_por_iteracao(num_iter + 1) } for num_iter in range(randrange(1, Base.VMS_POR_TESTE_MAX))] }, 'inventario.yaml')] monkeypatch.setattr(ParserLocal, '_ParserLocal__carregar_yaml', lambda mock: inventario) parser_local = ParserLocal(None) status, msg = parser_local.get_inventario(servidor_acesso) assert status is False assert 'Região' in msg and 'não é válida.' in msg
def test_parser_inventario_min_sem_padrao(self, _, servidor_acesso, monkeypatch): dados_teste = DadosTeste() inventario = [({ 'agrupamento': dados_teste.get_random_word(), 'nuvem': dados_teste.get_random_word(), 'vms': [{ 'nome': dados_teste.get_nome_unico(), 'descricao': dados_teste.get_random_word(), 'imagem': dados_teste.get_random_word(), 'qtde_cpu': randint(Base.CPU_MIN, Base.CPU_MAX), 'qtde_ram_mb': randint(Base.RAM_MIN, Base.RAM_MAX), 'redes': [{ 'nome': dados_teste.get_nome_unico(), 'principal': num_iter == 0 } for num_iter in range(randrange(1, Base.REDES_POR_VM_MAX))], } for _ in range(randrange(1, Base.VMS_POR_TESTE_MAX))] }, 'inventario.yaml')] monkeypatch.setattr(ParserLocal, '_ParserLocal__carregar_yaml', lambda mock: inventario) parser_local = ParserLocal(None) status, inventario_resposta = parser_local.get_inventario( servidor_acesso) assert status is True assert inventario_resposta == self.get_obj_inventario(inventario)
def test_parser_inventario_vazio(self, tmpdir, servidor_acesso): arquivo_inventario = tmpdir.join('inventario_vazio.yaml') arquivo_inventario.write('') parser_local = ParserLocal(arquivo_inventario.strpath) status, msg = parser_local.get_inventario(servidor_acesso) assert status is False assert msg == 'Arquivo de inventário vazio.'
def test_parser_inventario_com_discos_adicionais(self, _, servidor_acesso, monkeypatch): dados_teste = DadosTeste() inventario = [({ 'agrupamento': dados_teste.get_random_word(), 'nuvem': dados_teste.get_random_word(), 'imagem_padrao': dados_teste.get_random_word(), 'qtde_cpu_padrao': randint(Base.CPU_MIN, Base.CPU_MAX), 'qtde_ram_mb_padrao': randint(Base.RAM_MIN, Base.RAM_MAX), 'redes_padrao': [{ 'nome': dados_teste.get_nome_unico(), 'principal': num_iter == 0, } for num_iter in range(randrange(1, Base.REDES_POR_VM_MAX))], 'vms': [{ 'nome': dados_teste.get_nome_unico(), 'discos_adicionais': [{ 'arquivo': dados_teste.get_nome_unico(), 'tipo': choice([enum.value for enum in SCDiskBusType]), 'tamanho_mb': randint(1, 1073741824), 'tamanho_tipo': choice([enum.value for enum in SCDiskSizeType]), } for _ in range(randrange(1, Base.DISCOS_POR_VM_MAX))], } for _ in range(randrange(1, Base.VMS_POR_TESTE_MAX))] }, 'inventario.yaml')] monkeypatch.setattr(ParserLocal, '_ParserLocal__carregar_yaml', lambda mock: inventario) parser_local = ParserLocal(None) status, inventario_resposta = parser_local.get_inventario( servidor_acesso) # Assert inventário assert status is True assert inventario_resposta == self.get_obj_inventario(inventario) # Assert discos adicionais for nome_vm in inventario_resposta.vms: discos_adicionais_vm = inventario_resposta.vms[ nome_vm].discos_adicionais discos_adicionais_ok = self.get_discos_adicionais_vm( inventario, nome_vm) assert not discos_adicionais_vm.keys() - discos_adicionais_ok.keys( ) for arquivo in discos_adicionais_vm: assert discos_adicionais_vm[arquivo] == discos_adicionais_ok[ arquivo]
def obter_inventario_local(servidor_acesso, arquivo_inventario, ocultar_progresso, filtro_nome_vm=None, filtro_dados_completos=True): imprimir_acao_corrente('Obtendo inventário local', ocultar_progresso) parser_local = ParserLocal(arquivo_inventario) status, inventario_local = parser_local.get_inventario( servidor_acesso, filtro_nome_vm, filtro_dados_completos) validar_retorno_operacao_sem_lock( status, inventario_local, ocultar_progresso) return inventario_local
def test_parser_inventario_com_ansible(self, _, servidor_acesso, monkeypatch): dados_teste = DadosTeste() inventario = [({ 'agrupamento': dados_teste.get_random_word(), 'nuvem': dados_teste.get_random_word(), 'imagem_padrao': dados_teste.get_random_word(), 'qtde_cpu_padrao': randint(Base.CPU_MIN, Base.CPU_MAX), 'qtde_ram_mb_padrao': randint(Base.RAM_MIN, Base.RAM_MAX), 'redes_padrao': [{ 'nome': dados_teste.get_nome_unico(), 'principal': num_iter == 0, } for num_iter in range(randrange(1, Base.REDES_POR_VM_MAX))], 'vms': [{ 'nome': dados_teste.get_nome_unico(), 'ansible': [{ 'grupo': dados_teste.get_nome_unico(), 'vars': [{ 'nome': dados_teste.get_nome_unico(), 'valor': dados_teste.get_random_word() } for _ in range(randrange(0, Base.ANSIBLE_ITERACAO_MAX))], } for _ in range(randrange(1, Base.ANSIBLE_ITERACAO_MAX))], } for _ in range(randrange(1, Base.VMS_POR_TESTE_MAX))] }, 'inventario.yaml')] monkeypatch.setattr(ParserLocal, '_ParserLocal__carregar_yaml', lambda mock: inventario) parser_local = ParserLocal(None) status, inventario_resposta = parser_local.get_inventario( servidor_acesso) # Assert inventário assert status is True assert inventario_resposta == self.get_obj_inventario(inventario) # Assert dados ansible for nome_vm in inventario_resposta.vms: dados_ansible_vm = inventario_resposta.vms[nome_vm].dados_ansible dados_ansible_ok = self.get_dados_ansible_vm(inventario, nome_vm) assert not dados_ansible_vm.keys() - dados_ansible_ok.keys() for nome_grupo in dados_ansible_vm: assert dados_ansible_vm[nome_grupo] == dados_ansible_ok[ nome_grupo]
def test_parser_inventario_disco_adicional_duplicado( self, _, servidor_acesso, monkeypatch): dados_teste = DadosTeste() arquivo = dados_teste.get_nome_unico() inventario = [({ 'agrupamento': dados_teste.get_random_word(), 'nuvem': dados_teste.get_random_word(), 'vms': [{ 'nome': dados_teste.get_nome_unico(), 'discos_adicionais': [{ 'arquivo': arquivo, 'tipo': choice([enum.value for enum in SCDiskBusType]), 'tamanho_mb': randint(Base.TAMANHO_DISCO_MIN, Base.TAMANHO_DISCO_MAX), 'tamanho_tipo': choice([enum.value for enum in SCDiskSizeType]), }, { 'arquivo': arquivo, 'tipo': choice([enum.value for enum in SCDiskBusType]), 'tamanho_mb': randint(Base.TAMANHO_DISCO_MIN, Base.TAMANHO_DISCO_MAX), 'tamanho_tipo': choice([enum.value for enum in SCDiskSizeType]), }] }] }, 'inventario.yaml')] monkeypatch.setattr(ParserLocal, '_ParserLocal__carregar_yaml', lambda mock: inventario) parser_local = ParserLocal(None) status, msg = parser_local.get_inventario(servidor_acesso) assert status is False assert msg == f"Disco '{arquivo}' referenciado mais de uma vez " \ f"para a VM '{inventario[0][0]['vms'][0]['nome']}'."
def test_parser_inventario_vms_sem_imagem(self, _, servidor_acesso, monkeypatch): dados_teste = DadosTeste() inventario = [({ 'agrupamento': dados_teste.get_random_word(), 'nuvem': dados_teste.get_random_word(), 'vms': [{ 'nome': dados_teste.get_nome_unico() } for _ in range(randrange(1, Base.VMS_POR_TESTE_MAX))] }, 'inventario.yaml')] monkeypatch.setattr(ParserLocal, '_ParserLocal__carregar_yaml', lambda mock: inventario) parser_local = ParserLocal(None) status, msg = parser_local.get_inventario(servidor_acesso) assert status is False assert msg == f"Imagem da VM {inventario[0][0]['vms'][0]['nome']} não definida."
def test_parser_inventario_vms_nome_invalido(self, _, servidor_acesso, monkeypatch): dados_teste = DadosTeste() qtde_vms = randrange(1, Base.VMS_POR_TESTE_MAX) inventario = [({ 'agrupamento': dados_teste.get_random_word(), 'nuvem': dados_teste.get_random_word(), 'vms': [{ 'nome': dados_teste.get_random_nome_vm_incorreto() } for _ in range(qtde_vms)] }, 'inventario.yaml')] monkeypatch.setattr(ParserLocal, '_ParserLocal__carregar_yaml', lambda mock: inventario) parser_local = ParserLocal(None) status, msg = parser_local.get_inventario(servidor_acesso) assert status is False assert qtde_vms == sum(1 for _ in re.finditer( re.escape('is not a caracteres alfanuméricos (máx 15)'), msg))