diff --git a/Makefile b/Makefile index 01bcdbb39..3ae20093a 100755 --- a/Makefile +++ b/Makefile @@ -51,8 +51,8 @@ CMD_INSTALACAO_SIP_MODULO = echo -ne '$(SIP_DATABASE_USER)\n$(SIP_DATABASE_PASSW CMD_COMPOSE_UNIT = $(CMD_DOCKER_COMPOSE) -f $(PEN_TEST_UNIT)/docker-compose.yml --env-file $(PEN_TEST_UNIT)/.env CMD_COMPOSE_FUNC = $(CMD_DOCKER_COMPOSE) -f $(PEN_TEST_FUNC)/docker-compose.yml --env-file $(PEN_TEST_FUNC)/.env CMD_COMPOSE_FUNC_EXEC = $(CMD_COMPOSE_FUNC) exec -T -CMD_CURL_LOGIN_ORG1 = $(CMD_COMPOSE_FUNC_EXEC) org1-http bash -c 'curl -s -L $${HOST_URL:-$$SEI_HOST_URL}/sei | grep -q ""' -CMD_CURL_LOGIN_ORG2 = $(CMD_COMPOSE_FUNC_EXEC) org2-http bash -c 'curl -s -L $${HOST_URL:-$$SEI_HOST_URL}/sei | grep -q ""' +CMD_CURL_LOGIN_ORG1 = $(CMD_COMPOSE_FUNC_EXEC) org1-http bash -c 'curl -s -L $${HOST_URL:-$$SEI_HOST_URL}/sei | grep -q "input.*txtUsuario.*"' +CMD_CURL_LOGIN_ORG2 = $(CMD_COMPOSE_FUNC_EXEC) org2-http bash -c 'curl -s -L $${HOST_URL:-$$SEI_HOST_URL}/sei | grep -q "input.*txtUsuario.*"' FILE_VENDOR_FUNCIONAL = $(PEN_TEST_FUNC)/vendor/bin/phpunit FILE_VENDOR_UNITARIO = $(PEN_TEST_UNIT)/vendor/bin/phpunit diff --git a/jenkins/01-Teste-Unico-ou-Grupo.groovy b/jenkins/01-Teste-Unico-ou-Grupo.groovy new file mode 100644 index 000000000..7caba210d --- /dev/null +++ b/jenkins/01-Teste-Unico-ou-Grupo.groovy @@ -0,0 +1,683 @@ +\/* + +Usuario jenkins precisa ter permissao de sudo +Jenkins minimo em 2.332 +criar secrets: +- credentialGitSpe +- org1CertSecret - secret file no jenkins com o cert all em formato pem para o orgao 1 +- org2CertSecret - secret file no jenkins com o cert all em formato pem para o orgao 2 +Obrigatorio que ele seja cadastrado no jenkins como um projeto apontando para um repo git +Nao subir direto o script no jenkins pois ele precisa do checkout inicial do repo +Nao rode ao mesmo tempo duas instancias da execucao no mesmo agente jenkins, +pois o projeto mod-sei-pen n suporta isso + +Setar os agentes com a label MOD-SEI-PEN e colocar a qtd de alocadores apenas em 1 +(para negar mais de um mesmo job ao mesmo tempo no mesmo agente, caso contrario um anula o outro) +O job 02 vai paralelizar esse job aqui portanto cd instancia deve executar em agentes separadas +e cada instancia deve usar orgas diferentes apontando para o barramento +*/ + +pipeline { + agent { + node{ + label "MOD-SEI-PEN" + } + } + + parameters { + string( + name: 'versaoModulo', + defaultValue:"master", + description: "branch/versao do modulo a executar os testes") + choice( + name: 'database', + choices: "mysql\noracle\nsqlserver", + description: 'Qual o banco de dados' ) + string( + name: 'urlGitSpe', + defaultValue:"github.com:supergovbr/super.git", + description: "Url do git onde encontra-se o Sistema de Processo Eletrônico a instalar o modulo") + string( + name: 'credentialGitSpe', + defaultValue:"gitcredsuper", + description: "Jenkins Credencial do git onde encontra-se o Spe") + string( + name: 'branchGitSpe', + defaultValue:"4.0.3", + description: "Branch/Tag do git onde encontra-se o Spe") + string( + name: 'folderSpe', + defaultValue:"/home/jenkins/spe", + description: "Pasta onde vai clonar o SPE") + choice( + name: 'sistema', + choices: "sei4\nsei41\nsei3\nsuper", + description: 'Qual o Sistema de Processo Eletrônico será utilizado nos testes?' ) + string( + name: 'folderModulo', + defaultValue:"/home/jenkins/modulomodseipen", + description: "Pasta onde vai copiar o modulo depois de clonado e rodar o make a partir dela. Necessario para n travar exec pois o compose ainda usa root") + booleanParam( + defaultValue: false, + name: 'bolFolderModuloDelete', + description: 'Deleta a pasta do módulo anterior. Limpa o cache do phpunit vendor e os arquivos temporarios. Aumenta o tempo de execucao') + string( + name: 'org1CertSecret', + defaultValue:"credModSeiPenOrg1Cert", + description: "Certificado de conexao ao tramita do orgao 1") + string( + name: 'passCertOrg1', + defaultValue:"VLnYTwTSXdvU83sS", + description: "Password do certificado de conexao ao tramita do orgao 1") + string( + name: 'org2CertSecret', + defaultValue:"credModSeiPenOrg2Cert", + description: "Certificado de conexao ao tramita do orgao 2") + string( + name: 'passCertOrg2', + defaultValue:"LUisD2wEtpDc6cIj", + description: "Password do certificado de conexao ao tramita do orgao 2") + string( + name: 'testParallel', + defaultValue:"3", + description: "Quantos processos simultaneos") + string( + name: 'testRetryCount', + defaultValue:"5", + description: "Quantas vezes deve repetir o teste caso o mesmo falhe") + string( + name: 'CONTEXTO_ORGAO_A_NUMERO_SEI', + defaultValue:"951") + string( + name: 'CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS', + defaultValue:"1") + string( + name: 'CONTEXTO_ORGAO_A_REP_ESTRUTURAS', + defaultValue:"Poder Executivo Federal") + string( + name: 'CONTEXTO_ORGAO_A_ID_ESTRUTURA', + defaultValue:"307") + string( + name: 'CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA', + defaultValue:"STF / PJ") + string( + name: 'CONTEXTO_ORGAO_A_NOME_UNIDADE', + defaultValue:"Supremo Tribunal Federal") + string( + name: 'CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA', + defaultValue:"318") + string( + name: 'CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA', + defaultValue:"Edital") + string( + name: 'CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA', + defaultValue:"ED") + string( + name: 'CONTEXTO_ORGAO_B_NUMERO_SEI', + defaultValue:"159") + string( + name: 'CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS', + defaultValue:"1") + string( + name: 'CONTEXTO_ORGAO_B_REP_ESTRUTURAS', + defaultValue:"Poder Executivo Federal") + string( + name: 'CONTEXTO_ORGAO_B_ID_ESTRUTURA', + defaultValue:"79116") + string( + name: 'CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA', + defaultValue:"PRODASEN") + string( + name: 'CONTEXTO_ORGAO_B_NOME_UNIDADE', + defaultValue:"Prodasen") + choice( + name: 'grupos_executar', + choices: "execute_without_receiving+execute_parallel_with_two_group1\nexecute_parallel_group1+execute_parallel_group3\nexecute_parallel_group2+execute_alone_group1\nexecute_alone_group2\nexecute_alone_group3\nexecute_alone_group4\nexecute_alone_group5\nexecute_alone_group6", + description: 'Selecione os grupos de testes a executar' ) + text( + name: 'testes', + defaultValue:"", + description: "Passe aqui os testes para rodar em uma nova suite. Caso em branco vai rodar o grupo selecionado acima. Passe em cada linha no seguinte formato: tests/RecebimentoRecusaJustificativaGrandeTest.php\ntests/TramiteProcessoComDevolucaoTest.php") + + } + + stages { + + stage('Inicializar'){ + + steps { + + script{ + DATABASE = params.database + GITURL = params.urlGitSpe + GITCRED = params.credentialGitSpe + GITBRANCH = params.branchGitSpe + + VERSAOMODULO = params.versaoModulo + + FOLDERSPE = params.folderSpe + SISTEMA = params.sistema + FOLDERMODULO = params.folderModulo + BOLFOLDERMODULODEL = params.bolFolderModuloDelete + ORG1_CERT = params.org1CertSecret + ORG1_CERT_PASS= params.passCertOrg1 + ORG2_CERT = params.org2CertSecret + ORG2_CERT_PASS= params.passCertOrg2 + + TESTE_PARALLEL = params.testParallel + TEST_RETRY_COUNT = params.testRetryCount + + CONTEXTO_ORGAO_A_NUMERO_SEI = params.CONTEXTO_ORGAO_A_NUMERO_SEI + CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS = params.CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS + CONTEXTO_ORGAO_A_REP_ESTRUTURAS = params.CONTEXTO_ORGAO_A_REP_ESTRUTURAS + CONTEXTO_ORGAO_A_ID_ESTRUTURA = params.CONTEXTO_ORGAO_A_ID_ESTRUTURA + CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA = params.CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA + CONTEXTO_ORGAO_A_NOME_UNIDADE = params.CONTEXTO_ORGAO_A_NOME_UNIDADE + CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA = params.CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA + CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA = params.CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA + CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA = params.CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA + CONTEXTO_ORGAO_B_NUMERO_SEI = params.CONTEXTO_ORGAO_B_NUMERO_SEI + CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS = params.CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS + CONTEXTO_ORGAO_B_REP_ESTRUTURAS = params.CONTEXTO_ORGAO_B_REP_ESTRUTURAS + CONTEXTO_ORGAO_B_ID_ESTRUTURA = params.CONTEXTO_ORGAO_B_ID_ESTRUTURA + CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA = params.CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA + CONTEXTO_ORGAO_B_NOME_UNIDADE = params.CONTEXTO_ORGAO_B_NOME_UNIDADE + + FOLDER_FUNCIONAIS = "tests_${SISTEMA}/funcional" + + GRUPOS_SELECIONADOS = params.grupos_executar + TESTES = "" + if(params.testes){ + testesarray = params.testes.split("\n") + for (i=0; i< testesarray.length; i++){ + TESTES += "" + testesarray[i] + "" + } + } + + if ( env.BUILD_NUMBER == '1' ){ + currentBuild.result = 'ABORTED' + warning('Informe os valores de parametro iniciais. Caso eles n tenham aparecido faça login novamente') + } + } + + script { + s = "${SISTEMA}: ${GITBRANCH} / ${DATABASE} / Mod: ${VERSAOMODULO} Executed @ ${NODE_NAME}" + if (TESTES == ''){ + s = s + " Grupos: ${GRUPOS_SELECIONADOS}" + } + } + //buildName "${SISTEMA}: ${GITBRANCH} / ${DATABASE} / Mod: ${VERSAOMODULO}" + buildDescription s + + sh """ + ifconfig || true + if [ -f ${FOLDERMODULO}/Makefile ]; then + make destroy || true + fi + + mkdir -p ${FOLDERMODULO} + sudo chown -R jenkins ${FOLDERMODULO} || true + sudo chmod +w -R ${FOLDERMODULO} || true + + if [ "${BOLFOLDERMODULODEL}" = "true" ]; then + rm -rf ${FOLDERMODULO} + mkdir -p ${FOLDERMODULO} + fi + """ + + dir("${FOLDERSPE}"){ + + sh """ + sudo rm -rf ${FOLDERSPE}/* || true + + git config --global http.sslVerify false + """ + + git branch: 'main', + credentialsId: GITCRED, + url: GITURL + + sh """ + git checkout ${GITBRANCH} + ls -l + + if [ -f ${FOLDERSPE}/src/sei/web/SEI.php ]; then + rm -rf sei sip infra + mv src/sei src/sip src/infra . + fi + """ + + } + + } + } + + stage('Checkout Modulo'){ + + steps { + + sh """ + git config --global http.sslVerify false + """ + + git branch: 'master', + //credentialsId: GITCRED, + url: "https://github.com/supergovbr/mod-sei-pen" + + sh """ + git checkout ${VERSAOMODULO} + git pull || true + ls -l + """ + + sh """ + ifconfig || true + if [ -f ${FOLDERMODULO}/Makefile ]; then + cd ${FOLDERMODULO} + make destroy || true + cd - + fi + + mkdir -p ${FOLDERMODULO} + sudo chown -R jenkins ${FOLDERMODULO} || true + sudo chmod +w -R ${FOLDERMODULO} || true + + if [ "${BOLFOLDERMODULODEL}" = "true" ]; then + sudo rm -rf ${FOLDERMODULO} + sudo mkdir -p ${FOLDERMODULO} + fi + + sudo \\cp -R * ${FOLDERMODULO} + sudo chown -R jenkins ${FOLDERMODULO} || true + sudo chmod +w -R ${FOLDERMODULO} || true + + """ + + dir("${FOLDERMODULO}"){ + + withCredentials([file(credentialsId: "${ORG1_CERT}", variable: 'ORG1CERT'), + file(credentialsId: "${ORG2_CERT}", variable: 'ORG2CERT')]) { + sh "cp \$ORG1CERT ${FOLDER_FUNCIONAIS}/assets/config/certificado_org1.pem" + sh "cp \$ORG2CERT ${FOLDER_FUNCIONAIS}/assets/config/certificado_org2.pem" + } + + sh script: """ + make destroy || true + + sudo chmod +r ${FOLDER_FUNCIONAIS}/assets/config/certificado_org1.pem + sudo chmod +r ${FOLDER_FUNCIONAIS}/assets/config/certificado_org2.pem + sudo rm -rf ${FOLDERSPE}/sei/config/mod-pen + sudo rm -rf ${FOLDERSPE}/sei/scripts/mod-pen + sudo rm -rf ${FOLDERSPE}/sei/web/modulos/pen + sudo rm -rf ${FOLDERSPE}/sip/config/mod-pen + sudo rm -rf ${FOLDERSPE}/sei/scripts/mod-pen + sudo rm -rf ${FOLDERSPE}/sei/config/ConfiguracaoSEI.php* + sudo rm -rf ${FOLDERSPE}/sip/config/ConfiguracaoSip.php* + + """, label: "Destroi ambiente e Remove Antigos" + + } + + } + } + + stage('Subir Sistema - Instalar Modulo'){ + + steps { + retry(3){ + dir("${FOLDERMODULO}"){ + sh script: """#!/bin/bash + + make destroy || true + sed -i "s|sistema=.*|sistema=${SISTEMA}|g" Makefile + sed -i "s|PARALLEL_TEST_NODES =.*|PARALLEL_TEST_NODES = ${TESTE_PARALLEL}|g" Makefile + rm -rf ${FOLDER_FUNCIONAIS}/.env + \\cp ${FOLDER_FUNCIONAIS}/env_${DATABASE} ${FOLDER_FUNCIONAIS}/.env + sed -i "s|SEI_PATH=.*|SEI_PATH=${FOLDERSPE}|g" ${FOLDER_FUNCIONAIS}/.env + sed -i "s|ORG1_CERTIFICADO_SENHA=.*|ORG1_CERTIFICADO_SENHA=$ORG1_CERT_PASS|g" ${FOLDER_FUNCIONAIS}/.env + sed -i "s|ORG2_CERTIFICADO_SENHA=.*|ORG2_CERTIFICADO_SENHA=$ORG2_CERT_PASS|g" ${FOLDER_FUNCIONAIS}/.env + + \\cp tests_sei4/funcional/phpunit.xml ${FOLDER_FUNCIONAIS}/phpunit.xml || true + + #sed -i "s|.*PEN_WAIT_TIMEOUT\\".*||g" ${FOLDER_FUNCIONAIS}/phpunit.xml + sed -i "s|.*PEN_WAIT_TIMEOUT_ARQUIVOS_GRANDES\\".*||g" ${FOLDER_FUNCIONAIS}/phpunit.xml + sed -i "s|.*PEN_WAIT_TIMEOUT_PROCESSAMENTO_EM_LOTE\\".*||g" ${FOLDER_FUNCIONAIS}/phpunit.xml + + sed -i "s|.*CONTEXTO_ORGAO_A_NUMERO_SEI\\".*||g" ${FOLDER_FUNCIONAIS}/phpunit.xml + sed -i "s|.*CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS\\".*||g" ${FOLDER_FUNCIONAIS}/phpunit.xml + sed -i "s|.*CONTEXTO_ORGAO_A_SIGLA_UNIDADE\\".*||g" ${FOLDER_FUNCIONAIS}/phpunit.xml + sed -i "s|.*CONTEXTO_ORGAO_A_REP_ESTRUTURAS\\".*||g" ${FOLDER_FUNCIONAIS}/phpunit.xml + sed -i "s|.*CONTEXTO_ORGAO_A_ID_ESTRUTURA\\".*||g" ${FOLDER_FUNCIONAIS}/phpunit.xml + sed -i "s|.*CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA\\".*||g" ${FOLDER_FUNCIONAIS}/phpunit.xml + sed -i "s|.*CONTEXTO_ORGAO_A_NOME_UNIDADE\\".*||g" ${FOLDER_FUNCIONAIS}/phpunit.xml + + sed -i "s|.*CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA\\".*||g" ${FOLDER_FUNCIONAIS}/phpunit.xml + sed -i "s|.*CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA\\".*||g" ${FOLDER_FUNCIONAIS}/phpunit.xml + sed -i "s|.*CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA\\".*||g" ${FOLDER_FUNCIONAIS}/phpunit.xml + sed -i "s|.*CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA\\".*||g" ${FOLDER_FUNCIONAIS}/phpunit.xml + + sed -i "s|.*CONTEXTO_ORGAO_B_NUMERO_SEI\\".*||g" ${FOLDER_FUNCIONAIS}/phpunit.xml + sed -i "s|.*CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS\\".*||g" ${FOLDER_FUNCIONAIS}/phpunit.xml + sed -i "s|.*CONTEXTO_ORGAO_B_REP_ESTRUTURAS\\".*||g" ${FOLDER_FUNCIONAIS}/phpunit.xml + sed -i "s|.*CONTEXTO_ORGAO_B_SIGLA_UNIDADE\\".*||g" ${FOLDER_FUNCIONAIS}/phpunit.xml + sed -i "s|.*CONTEXTO_ORGAO_B_ID_ESTRUTURA\\".*||g" ${FOLDER_FUNCIONAIS}/phpunit.xml + sed -i "s|.*CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA\\".*||g" ${FOLDER_FUNCIONAIS}/phpunit.xml + sed -i "s|.*CONTEXTO_ORGAO_B_NOME_UNIDADE\\".*||g" ${FOLDER_FUNCIONAIS}/phpunit.xml + + sed -i "s/\\[INFORME A SIGLA DE ESTRUTURA UTILIZADO PARA TESTE ORG1\\]//g" ${FOLDER_FUNCIONAIS}/phpunit.xml + sed -i "s/\\[INFORME A SIGLA DE ESTRUTURA UTILIZADO PARA TESTE ORG2\\]//g" ${FOLDER_FUNCIONAIS}/phpunit.xml + + sed -i "/INFORME O ID DE ESTRUTURA UTILIZADO PARA TESTE ORG1/d" ${FOLDER_FUNCIONAIS}/phpunit.xml + sed -i "/INFORME O NOME DA ESTRUTURA UTILIZADO PARA TESTE ORG1/d" ${FOLDER_FUNCIONAIS}/phpunit.xml + sed -i "/INFORME O ID DE ESTRUTURA UTILIZADO PARA TESTE ORG 1.11/d" ${FOLDER_FUNCIONAIS}/phpunit.xml + sed -i "/INFORME O NOME DA ESTRUTURA UTILIZADO PARA TESTE ORG 1.1/d" ${FOLDER_FUNCIONAIS}/phpunit.xml + sed -i "/INFORME O ID DE ESTRUTURA UTILIZADO PARA TESTE ORG 2/d" ${FOLDER_FUNCIONAIS}/phpunit.xml + sed -i "/INFORME O NOME DA ESTRUTURA UTILIZADO PARA TESTE ORG 2/d" ${FOLDER_FUNCIONAIS}/phpunit.xml + + + cp ${FOLDER_FUNCIONAIS}/phpunit.xml phpunitoriginal.xml + + + make destroy + make up + + # apenas teste, lembrar de retirar ao final + sleep 5 + make check-isalive + + echo "" + echo "Vamos instalar o modulo. A saida n sera mostrada aqui. Apenas se houver erro..." + set +e + make install 2>&1 > tempinstall.txt + es=\$? + set -e + if [ "\$es" = "0" ]; then + echo "Instalado sem erro" + else + cat tempinstall.txt + exit 1 + fi + rm -rf tempinstall.txt + + # apenas teste, lembrar de retirar ao final + docker-compose -f tests_${SISTEMA}/funcional/docker-compose.yml --env-file tests_${SISTEMA}/funcional/.env exec org1-http bash -c "> /etc/cron.d/sei; > /etc/cron.d/sip" + docker-compose -f tests_${SISTEMA}/funcional/docker-compose.yml --env-file tests_${SISTEMA}/funcional/.env exec org2-http bash -c "> /etc/cron.d/sei; > /etc/cron.d/sip" + + pwd + """, label: "Configura sobe ambiente e instala modulo" + + script{ + if(TESTES){ + sh """ + cp phpunitoriginal.xml phpunitsubstituir.xml + sed -i "s||${TESTES}|g" phpunitsubstituir.xml + cp phpunitsubstituir.xml ${FOLDER_FUNCIONAIS}/phpunit.xml + + sed -i "s|TEST_SUIT = funcional.*|TEST_SUIT = rodarnovamente|g" Makefile + """ + } + } + } + } + + } + } + + + stage('Testes Unitarios'){ + + steps{ + dir("${FOLDERMODULO}"){ + sh script: """ + + make test-unit + + """, label: "Roda as Suites de Testes Unitarios" + } + } + + } + + + stage('Rodar Testes Funcionais'){ + + + parallel { + + stage('Funcionais') { + steps { + dir("${FOLDERMODULO}"){ + + script{ + + sh "rm -rf resultado_todos.txt monitoramento_liberado.ok;" + + GRUPOS = [ "execute_without_receiving", "execute_parallel_group1", "execute_parallel_group2", "execute_parallel_group3", "execute_parallel_with_two_group1", "execute_alone_group1", "execute_alone_group2", "execute_alone_group3", "execute_alone_group4", "execute_alone_group5", "execute_alone_group6",] + if (GRUPOS_SELECIONADOS == "execute_without_receiving+execute_parallel_with_two_group1"){ + GRUPOS = [ "execute_without_receiving", "execute_parallel_with_two_group1" ] + } + if (GRUPOS_SELECIONADOS == "execute_parallel_group1+execute_parallel_group3"){ + GRUPOS = [ "execute_parallel_group1", "execute_parallel_group3"] + } + if (GRUPOS_SELECIONADOS == "execute_parallel_group2+execute_alone_group1"){ + GRUPOS = [ "execute_parallel_group2", "execute_alone_group1"] + } + if (GRUPOS_SELECIONADOS == "execute_alone_group2"){ + GRUPOS = [ "execute_alone_group2" ] + } + if (GRUPOS_SELECIONADOS == "execute_alone_group3"){ + GRUPOS = [ "execute_alone_group3" ] + } + if (GRUPOS_SELECIONADOS == "execute_alone_group4"){ + GRUPOS = [ "execute_alone_group4" ] + } + if (GRUPOS_SELECIONADOS == "execute_alone_group5"){ + GRUPOS = [ "execute_alone_group5" ] + } + if (GRUPOS_SELECIONADOS == "execute_alone_group6"){ + GRUPOS = [ "execute_alone_group6" ] + } + + if (TESTES) { + GRUPOS = [""] + } + + for (G in GRUPOS){ + + if (G == ""){ SUITE = "TEST_SUIT=rodarnovamente" } else { SUITE = "TEST_SUIT=funcional" } + + TEST_GROUP_INCLUIR = "" + + if(G != ""){ + TEST_GROUP_INCLUIR = """TEST_GROUP_INCLUIR="--group ${G} --verbose=1" """ + } + if(G == 'execute_without_receiving' || G == 'execute_alone_group1' || G == 'execute_alone_group2' || G == 'execute_alone_group3' || G == 'execute_alone_group4' || G == 'execute_alone_group5' || G == 'execute_alone_group6'){ + sh """ sed -i "s|PARALLEL_TEST_NODES =.*|PARALLEL_TEST_NODES = 1|g" Makefile """ + + }else if(G == 'execute_parallel_with_two_group1'){ + sh """ sed -i "s|PARALLEL_TEST_NODES =.*|PARALLEL_TEST_NODES = 2|g" Makefile """ + }else{ + sh """ sed -i "s|PARALLEL_TEST_NODES =.*|PARALLEL_TEST_NODES = ${TESTE_PARALLEL}|g" Makefile """ + } + + if(G != "execute_without_receiving"){ + sh "touch monitoramento_liberado.ok;" + }else{ + sh "rm -rf monitoramento_liberado.ok;" + } + + timestamps { + + sh script: """#!/bin/bash + + + + EXECUTAR_TESTES="true" + ERRCOUNT=0 + SUITE_ATUAL=${SUITE} + + while [ "\$EXECUTAR_TESTES" = "true" ]; do + + EXECUTAR_TESTES="false" + rm -rf resultado.txt + + set -o pipefail + set +e + echo "Executando Testes Funcionais..." + RESULTMAKE=\$? + make \$SUITE_ATUAL ${TEST_GROUP_INCLUIR} test-functional-parallel | tee resultado.txt + RESULTMAKE=\$? + set -e + set +o pipefail + + cat resultado.txt >> resultado_todos.txt + + grep -o -E "[0-9]\\) .*::" resultado.txt | sed "s|::||g" | cut -d\\ -f2 | uniq > rodarnovamente.txt + + s="" + for t in \$(cat rodarnovamente.txt); do + + s="\$stests/\$t.php" + + done + + if [ ! "\$s" = "" ]; then + + ERRCOUNT=\$((ERRCOUNT+1)) + if [ \$ERRCOUNT -le ${TEST_RETRY_COUNT} ]; then + EXECUTAR_TESTES="true" + + cp phpunitoriginal.xml phpunitsubstituir.xml + sed -i "s||\$s|g" phpunitsubstituir.xml + cp phpunitsubstituir.xml ${FOLDER_FUNCIONAIS}/phpunit.xml + + SUITE_ATUAL="TEST_SUIT=rodarnovamente" + + + fi + else + rm -rf rodarnovamente.txt + fi + + + done + + if [ -f "rodarnovamente.txt" ]; then + exit 1 + + fi; + + if [ ! "\$RESULTMAKE" = "0" ]; then + #vamos tentar achar erro + if [ "\$s" = "" ]; then + set +e + grep "OK" resultado.txt + RESULTMAKE=\$? + set -e + if [ ! "\$RESULTMAKE" = "0" ]; then + exit 1 + fi + + else + exit 1 + fi + + fi; + + + """, label: "Roda as Suites de Testes Funcionais" + + } + + + + } + + + + + + } // script + + + } + + + } + post { + + failure { + dir("${FOLDERMODULO}"){ + sh script: """ + cat rodarnovamente.txt; + """, label: "Testes que falharam" + + sh script: """ + cat resultado.txt; + """, label: "Stack de Erros do PHPUNIT" + } + } + + always { + dir("${FOLDERMODULO}"){ + sh """ + sleep 30; + touch testesfinalizados.ok + cat resultado_todos.txt + """ + + } + } + } + + } + stage('Recebimento de Processos') { + steps { + dir("${FOLDERMODULO}"){ + sh script: """ + while [ ! -f testesfinalizados.ok ] + do + while [ ! -f monitoramento_liberado.ok ] + do + echo "Aguardando liberação para monitoramento" + sleep 10 + + if [ -f testesfinalizados.ok ]; then + exit 0 + fi; + + done + + sleep 2 + make tramitar-pendencias-simples || true + done + """, label: "Tramitar Pendencias" + } + } + post { + always { + dir("${FOLDERMODULO}"){ + sh "rm testesfinalizados.ok" + } + } + } + } + + } + + } + + } + post { + always { + dir("${FOLDERMODULO}"){ + sh script: """ + rm -rf testesfinalizados.ok + #sudo chown -R root:jenkins ${FOLDER_FUNCIONAIS}/assets/cron.d + make destroy || true + #sudo chown -R root:jenkins ${FOLDER_FUNCIONAIS}/assets/cron.d + """, label: "Destroi Ambiente" + } + } + } +} diff --git a/jenkins/02-Teste-Todos-os-Grupos.groovy b/jenkins/02-Teste-Todos-os-Grupos.groovy new file mode 100644 index 000000000..365be5f3a --- /dev/null +++ b/jenkins/02-Teste-Todos-os-Grupos.groovy @@ -0,0 +1,585 @@ +/* + +Usuario jenkins precisa ter permissao de sudo +Jenkins minimo em 2.332 +usa o pipeline utility plugin + +chama o job 01 de forma serializada +crie as credenciais instanciamysql, instanciasqlserver e oracle de acordo com o +modelo na pasta jenkins/assets + +*/ + +pipeline { + agent { + node{ + label "master" + } + } + + options { + disableConcurrentBuilds() + } + + parameters { + + string( + name: 'versaoModulo', + defaultValue:"master", + description: "Branch/Tag do git onde encontra-se o Modulo") + string( + name: 'branchGitSpe', + defaultValue:"4.0.11", + description: "Branch/Tag do git onde encontra-se o Sistema") + choice( + name: 'sistema', + choices: "sei4\nsei3\nsuper", + description: 'Qual o Sistema de Processo Eletrônico será utilizado nos testes?' ) + choice( + name: 'database', + choices: "mysql\noracle\nsqlserver", + description: 'Qual o banco de dados' ) + + + } + + stages { + + + + stage("Preparar execucao"){ + + steps{ + + + script{ + + if ( env.BUILD_NUMBER == '1' ){ + currentBuild.result = 'ABORTED' + warning('Informe os valores de parametro iniciais. Caso eles n tenham aparecido faça login novamente') + } + + BRANCHGITSPE = params.branchGitSpe + SISTEMA = params.sistema + VERSAOMODULO = params.versaoModulo + DATABASE = params.database + + withCredentials([file(credentialsId: "instanciamysql", variable: 'INSTANCIA_MYSQL'), + file(credentialsId: "instanciasqlserver", variable: 'INSTANCIA_SQLSERVER'), + file(credentialsId: "instanciaoracle", variable: 'INSTANCIA_ORACLE'), + file(credentialsId: "instanciaorgao7_8.txt", variable: 'INSTANCIA_ORGAO7_8'), + file(credentialsId: "instanciaorgao9_10.txt", variable: 'INSTANCIA_ORGAO9_10'), + file(credentialsId: "instanciaorgao11_12.txt", variable: 'INSTANCIA_ORGAO11_12'), + file(credentialsId: "instanciaorgao13_14.txt", variable: 'INSTANCIA_ORGAO13_14'), + file(credentialsId: "instanciaorgao15_16.txt", variable: 'INSTANCIA_ORGAO15_16'), + ]) { + sh "cp \$INSTANCIA_MYSQL instanciamysql.props" + sh "cp \$INSTANCIA_SQLSERVER instanciasqlserver.props" + sh "cp \$INSTANCIA_ORACLE instanciaoracle.props" + sh "cp \$INSTANCIA_ORGAO7_8 instanciaorgao7_8.props" + sh "cp \$INSTANCIA_ORGAO9_10 instanciaorgao9_10.props" + sh "cp \$INSTANCIA_ORGAO11_12 instanciaorgao11_12.props" + sh "cp \$INSTANCIA_ORGAO13_14 instanciaorgao13_14.props" + sh "cp \$INSTANCIA_ORGAO15_16 instanciaorgao15_16.props" + } + + s = "${SISTEMA}: ${BRANCHGITSPE} / ${DATABASE} / Mod: ${VERSAOMODULO}" + + //buildName "${SISTEMA}: ${GITBRANCH} / ${DATABASE} / Mod: ${VERSAOMODULO}" + buildDescription s + + } + + } + + } + + stage("Executar nas Bases"){ + + parallel { + stage("Grupo de Testes 1"){ + steps{ + script{ + + + def props = readProperties file: 'instanciamysql.props' + database = DATABASE + org1CertSecret = props['org1CertSecret'] + passCertOrg1 = props['passCertOrg1'] + org2CertSecret = props['org2CertSecret'] + passCertOrg2 = props['passCertOrg2'] + CONTEXTO_ORGAO_A_NUMERO_SEI = props['CONTEXTO_ORGAO_A_NUMERO_SEI'] + CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_A_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_A_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_A_ID_ESTRUTURA = props['CONTEXTO_ORGAO_A_ID_ESTRUTURA'] + CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA = props['CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA'] + CONTEXTO_ORGAO_A_NOME_UNIDADE = props['CONTEXTO_ORGAO_A_NOME_UNIDADE'] + CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA = props['CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA'] + CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA = props['CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA'] + CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA = props['CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA'] + CONTEXTO_ORGAO_B_NUMERO_SEI = props['CONTEXTO_ORGAO_B_NUMERO_SEI'] + CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_B_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_B_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_B_ID_ESTRUTURA = props['CONTEXTO_ORGAO_B_ID_ESTRUTURA'] + CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA = props['CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA'] + CONTEXTO_ORGAO_B_NOME_UNIDADE = props['CONTEXTO_ORGAO_B_NOME_UNIDADE'] + + build job: '01-Teste-Unico-ou-Grupo.groovy', + parameters: + [ + string(name: 'database', value: database), + string(name: 'org1CertSecret', value: org1CertSecret), + string(name: 'passCertOrg1', value: passCertOrg1), + string(name: 'org2CertSecret', value: org2CertSecret), + string(name: 'passCertOrg2', value: passCertOrg2), + string(name: 'CONTEXTO_ORGAO_A_NUMERO_SEI', value: CONTEXTO_ORGAO_A_NUMERO_SEI), + string(name: 'CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_A_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_A_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_A_ID_ESTRUTURA', value: CONTEXTO_ORGAO_A_ID_ESTRUTURA), + string(name: 'CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA', value: CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA), + string(name: 'CONTEXTO_ORGAO_A_NOME_UNIDADE', value: CONTEXTO_ORGAO_A_NOME_UNIDADE), + string(name: 'CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA', value: CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA), + string(name: 'CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA', value: CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA), + string(name: 'CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA', value: CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA), + string(name: 'CONTEXTO_ORGAO_B_NUMERO_SEI', value: CONTEXTO_ORGAO_B_NUMERO_SEI), + string(name: 'CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_B_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_B_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_B_ID_ESTRUTURA', value: CONTEXTO_ORGAO_B_ID_ESTRUTURA), + string(name: 'CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA', value: CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA), + string(name: 'CONTEXTO_ORGAO_B_NOME_UNIDADE', value: CONTEXTO_ORGAO_B_NOME_UNIDADE), + string(name: 'branchGitSpe', value: BRANCHGITSPE), + string(name: 'sistema', value: SISTEMA), + string(name: 'versaoModulo', value: VERSAOMODULO), + string(name: 'grupos_executar', value: "execute_without_receiving+execute_parallel_with_two_group1"), + + + ], wait: true + }} + + } + + stage("Grupo de Testes 2"){ + + steps{ + script{ + + + def props = readProperties file: 'instanciasqlserver.props' + database = DATABASE + org1CertSecret = props['org1CertSecret'] + passCertOrg1 = props['passCertOrg1'] + org2CertSecret = props['org2CertSecret'] + passCertOrg2 = props['passCertOrg2'] + CONTEXTO_ORGAO_A_NUMERO_SEI = props['CONTEXTO_ORGAO_A_NUMERO_SEI'] + CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_A_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_A_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_A_ID_ESTRUTURA = props['CONTEXTO_ORGAO_A_ID_ESTRUTURA'] + CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA = props['CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA'] + CONTEXTO_ORGAO_A_NOME_UNIDADE = props['CONTEXTO_ORGAO_A_NOME_UNIDADE'] + CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA = props['CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA'] + CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA = props['CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA'] + CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA = props['CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA'] + CONTEXTO_ORGAO_B_NUMERO_SEI = props['CONTEXTO_ORGAO_B_NUMERO_SEI'] + CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_B_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_B_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_B_ID_ESTRUTURA = props['CONTEXTO_ORGAO_B_ID_ESTRUTURA'] + CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA = props['CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA'] + CONTEXTO_ORGAO_B_NOME_UNIDADE = props['CONTEXTO_ORGAO_B_NOME_UNIDADE'] + + build job: '01-Teste-Unico-ou-Grupo.groovy', + parameters: + [ + string(name: 'database', value: database), + string(name: 'org1CertSecret', value: org1CertSecret), + string(name: 'passCertOrg1', value: passCertOrg1), + string(name: 'org2CertSecret', value: org2CertSecret), + string(name: 'passCertOrg2', value: passCertOrg2), + string(name: 'CONTEXTO_ORGAO_A_NUMERO_SEI', value: CONTEXTO_ORGAO_A_NUMERO_SEI), + string(name: 'CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_A_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_A_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_A_ID_ESTRUTURA', value: CONTEXTO_ORGAO_A_ID_ESTRUTURA), + string(name: 'CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA', value: CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA), + string(name: 'CONTEXTO_ORGAO_A_NOME_UNIDADE', value: CONTEXTO_ORGAO_A_NOME_UNIDADE), + string(name: 'CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA', value: CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA), + string(name: 'CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA', value: CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA), + string(name: 'CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA', value: CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA), + string(name: 'CONTEXTO_ORGAO_B_NUMERO_SEI', value: CONTEXTO_ORGAO_B_NUMERO_SEI), + string(name: 'CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_B_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_B_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_B_ID_ESTRUTURA', value: CONTEXTO_ORGAO_B_ID_ESTRUTURA), + string(name: 'CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA', value: CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA), + string(name: 'CONTEXTO_ORGAO_B_NOME_UNIDADE', value: CONTEXTO_ORGAO_B_NOME_UNIDADE), + string(name: 'branchGitSpe', value: BRANCHGITSPE), + string(name: 'sistema', value: SISTEMA), + string(name: 'versaoModulo', value: VERSAOMODULO), + string(name: 'grupos_executar', value: "execute_parallel_group1+execute_parallel_group3"), + ], wait: true + }} + + } + + stage("Grupo de Testes 3"){ + + steps{ + script{ + + def props = readProperties file: 'instanciaoracle.props' + database = DATABASE + org1CertSecret = props['org1CertSecret'] + passCertOrg1 = props['passCertOrg1'] + org2CertSecret = props['org2CertSecret'] + passCertOrg2 = props['passCertOrg2'] + CONTEXTO_ORGAO_A_NUMERO_SEI = props['CONTEXTO_ORGAO_A_NUMERO_SEI'] + CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_A_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_A_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_A_ID_ESTRUTURA = props['CONTEXTO_ORGAO_A_ID_ESTRUTURA'] + CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA = props['CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA'] + CONTEXTO_ORGAO_A_NOME_UNIDADE = props['CONTEXTO_ORGAO_A_NOME_UNIDADE'] + CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA = props['CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA'] + CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA = props['CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA'] + CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA = props['CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA'] + CONTEXTO_ORGAO_B_NUMERO_SEI = props['CONTEXTO_ORGAO_B_NUMERO_SEI'] + CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_B_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_B_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_B_ID_ESTRUTURA = props['CONTEXTO_ORGAO_B_ID_ESTRUTURA'] + CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA = props['CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA'] + CONTEXTO_ORGAO_B_NOME_UNIDADE = props['CONTEXTO_ORGAO_B_NOME_UNIDADE'] + + build job: '01-Teste-Unico-ou-Grupo.groovy', + parameters: + [ + string(name: 'database', value: database), + string(name: 'org1CertSecret', value: org1CertSecret), + string(name: 'passCertOrg1', value: passCertOrg1), + string(name: 'org2CertSecret', value: org2CertSecret), + string(name: 'passCertOrg2', value: passCertOrg2), + string(name: 'CONTEXTO_ORGAO_A_NUMERO_SEI', value: CONTEXTO_ORGAO_A_NUMERO_SEI), + string(name: 'CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_A_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_A_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_A_ID_ESTRUTURA', value: CONTEXTO_ORGAO_A_ID_ESTRUTURA), + string(name: 'CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA', value: CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA), + string(name: 'CONTEXTO_ORGAO_A_NOME_UNIDADE', value: CONTEXTO_ORGAO_A_NOME_UNIDADE), + string(name: 'CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA', value: CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA), + string(name: 'CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA', value: CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA), + string(name: 'CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA', value: CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA), + string(name: 'CONTEXTO_ORGAO_B_NUMERO_SEI', value: CONTEXTO_ORGAO_B_NUMERO_SEI), + string(name: 'CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_B_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_B_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_B_ID_ESTRUTURA', value: CONTEXTO_ORGAO_B_ID_ESTRUTURA), + string(name: 'CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA', value: CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA), + string(name: 'CONTEXTO_ORGAO_B_NOME_UNIDADE', value: CONTEXTO_ORGAO_B_NOME_UNIDADE), + string(name: 'branchGitSpe', value: BRANCHGITSPE), + string(name: 'sistema', value: SISTEMA), + string(name: 'versaoModulo', value: VERSAOMODULO), + string(name: 'grupos_executar', value: "execute_parallel_group2+execute_alone_group1"), + ], wait: true + }} + + } + + stage("Grupo de Testes 4"){ + + steps{ + script{ + + def props = readProperties file: 'instanciaorgao7_8.props' + database = DATABASE + org1CertSecret = props['org1CertSecret'] + passCertOrg1 = props['passCertOrg1'] + org2CertSecret = props['org2CertSecret'] + passCertOrg2 = props['passCertOrg2'] + CONTEXTO_ORGAO_A_NUMERO_SEI = props['CONTEXTO_ORGAO_A_NUMERO_SEI'] + CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_A_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_A_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_A_ID_ESTRUTURA = props['CONTEXTO_ORGAO_A_ID_ESTRUTURA'] + CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA = props['CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA'] + CONTEXTO_ORGAO_A_NOME_UNIDADE = props['CONTEXTO_ORGAO_A_NOME_UNIDADE'] + CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA = props['CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA'] + CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA = props['CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA'] + CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA = props['CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA'] + CONTEXTO_ORGAO_B_NUMERO_SEI = props['CONTEXTO_ORGAO_B_NUMERO_SEI'] + CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_B_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_B_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_B_ID_ESTRUTURA = props['CONTEXTO_ORGAO_B_ID_ESTRUTURA'] + CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA = props['CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA'] + CONTEXTO_ORGAO_B_NOME_UNIDADE = props['CONTEXTO_ORGAO_B_NOME_UNIDADE'] + + build job: '01-Teste-Unico-ou-Grupo.groovy', + parameters: + [ + string(name: 'database', value: database), + string(name: 'org1CertSecret', value: org1CertSecret), + string(name: 'passCertOrg1', value: passCertOrg1), + string(name: 'org2CertSecret', value: org2CertSecret), + string(name: 'passCertOrg2', value: passCertOrg2), + string(name: 'CONTEXTO_ORGAO_A_NUMERO_SEI', value: CONTEXTO_ORGAO_A_NUMERO_SEI), + string(name: 'CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_A_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_A_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_A_ID_ESTRUTURA', value: CONTEXTO_ORGAO_A_ID_ESTRUTURA), + string(name: 'CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA', value: CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA), + string(name: 'CONTEXTO_ORGAO_A_NOME_UNIDADE', value: CONTEXTO_ORGAO_A_NOME_UNIDADE), + string(name: 'CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA', value: CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA), + string(name: 'CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA', value: CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA), + string(name: 'CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA', value: CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA), + string(name: 'CONTEXTO_ORGAO_B_NUMERO_SEI', value: CONTEXTO_ORGAO_B_NUMERO_SEI), + string(name: 'CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_B_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_B_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_B_ID_ESTRUTURA', value: CONTEXTO_ORGAO_B_ID_ESTRUTURA), + string(name: 'CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA', value: CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA), + string(name: 'CONTEXTO_ORGAO_B_NOME_UNIDADE', value: CONTEXTO_ORGAO_B_NOME_UNIDADE), + string(name: 'branchGitSpe', value: BRANCHGITSPE), + string(name: 'sistema', value: SISTEMA), + string(name: 'versaoModulo', value: VERSAOMODULO), + string(name: 'grupos_executar', value: "execute_alone_group2"), + ], wait: true + }} + + } + + stage("Grupo de Testes 5"){ + + steps{ + script{ + + def props = readProperties file: 'instanciaorgao9_10.props' + database = DATABASE + org1CertSecret = props['org1CertSecret'] + passCertOrg1 = props['passCertOrg1'] + org2CertSecret = props['org2CertSecret'] + passCertOrg2 = props['passCertOrg2'] + CONTEXTO_ORGAO_A_NUMERO_SEI = props['CONTEXTO_ORGAO_A_NUMERO_SEI'] + CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_A_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_A_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_A_ID_ESTRUTURA = props['CONTEXTO_ORGAO_A_ID_ESTRUTURA'] + CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA = props['CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA'] + CONTEXTO_ORGAO_A_NOME_UNIDADE = props['CONTEXTO_ORGAO_A_NOME_UNIDADE'] + CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA = props['CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA'] + CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA = props['CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA'] + CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA = props['CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA'] + CONTEXTO_ORGAO_B_NUMERO_SEI = props['CONTEXTO_ORGAO_B_NUMERO_SEI'] + CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_B_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_B_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_B_ID_ESTRUTURA = props['CONTEXTO_ORGAO_B_ID_ESTRUTURA'] + CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA = props['CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA'] + CONTEXTO_ORGAO_B_NOME_UNIDADE = props['CONTEXTO_ORGAO_B_NOME_UNIDADE'] + + build job: '01-Teste-Unico-ou-Grupo.groovy', + parameters: + [ + string(name: 'database', value: database), + string(name: 'org1CertSecret', value: org1CertSecret), + string(name: 'passCertOrg1', value: passCertOrg1), + string(name: 'org2CertSecret', value: org2CertSecret), + string(name: 'passCertOrg2', value: passCertOrg2), + string(name: 'CONTEXTO_ORGAO_A_NUMERO_SEI', value: CONTEXTO_ORGAO_A_NUMERO_SEI), + string(name: 'CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_A_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_A_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_A_ID_ESTRUTURA', value: CONTEXTO_ORGAO_A_ID_ESTRUTURA), + string(name: 'CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA', value: CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA), + string(name: 'CONTEXTO_ORGAO_A_NOME_UNIDADE', value: CONTEXTO_ORGAO_A_NOME_UNIDADE), + string(name: 'CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA', value: CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA), + string(name: 'CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA', value: CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA), + string(name: 'CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA', value: CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA), + string(name: 'CONTEXTO_ORGAO_B_NUMERO_SEI', value: CONTEXTO_ORGAO_B_NUMERO_SEI), + string(name: 'CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_B_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_B_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_B_ID_ESTRUTURA', value: CONTEXTO_ORGAO_B_ID_ESTRUTURA), + string(name: 'CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA', value: CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA), + string(name: 'CONTEXTO_ORGAO_B_NOME_UNIDADE', value: CONTEXTO_ORGAO_B_NOME_UNIDADE), + string(name: 'branchGitSpe', value: BRANCHGITSPE), + string(name: 'sistema', value: SISTEMA), + string(name: 'versaoModulo', value: VERSAOMODULO), + string(name: 'grupos_executar', value: "execute_alone_group3"), + ], wait: true + }} + + } + + stage("Grupo de Testes 6"){ + + steps{ + script{ + + def props = readProperties file: 'instanciaorgao11_12.props' + database = DATABASE + org1CertSecret = props['org1CertSecret'] + passCertOrg1 = props['passCertOrg1'] + org2CertSecret = props['org2CertSecret'] + passCertOrg2 = props['passCertOrg2'] + CONTEXTO_ORGAO_A_NUMERO_SEI = props['CONTEXTO_ORGAO_A_NUMERO_SEI'] + CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_A_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_A_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_A_ID_ESTRUTURA = props['CONTEXTO_ORGAO_A_ID_ESTRUTURA'] + CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA = props['CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA'] + CONTEXTO_ORGAO_A_NOME_UNIDADE = props['CONTEXTO_ORGAO_A_NOME_UNIDADE'] + CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA = props['CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA'] + CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA = props['CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA'] + CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA = props['CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA'] + CONTEXTO_ORGAO_B_NUMERO_SEI = props['CONTEXTO_ORGAO_B_NUMERO_SEI'] + CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_B_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_B_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_B_ID_ESTRUTURA = props['CONTEXTO_ORGAO_B_ID_ESTRUTURA'] + CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA = props['CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA'] + CONTEXTO_ORGAO_B_NOME_UNIDADE = props['CONTEXTO_ORGAO_B_NOME_UNIDADE'] + + build job: '01-Teste-Unico-ou-Grupo.groovy', + parameters: + [ + string(name: 'database', value: database), + string(name: 'org1CertSecret', value: org1CertSecret), + string(name: 'passCertOrg1', value: passCertOrg1), + string(name: 'org2CertSecret', value: org2CertSecret), + string(name: 'passCertOrg2', value: passCertOrg2), + string(name: 'CONTEXTO_ORGAO_A_NUMERO_SEI', value: CONTEXTO_ORGAO_A_NUMERO_SEI), + string(name: 'CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_A_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_A_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_A_ID_ESTRUTURA', value: CONTEXTO_ORGAO_A_ID_ESTRUTURA), + string(name: 'CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA', value: CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA), + string(name: 'CONTEXTO_ORGAO_A_NOME_UNIDADE', value: CONTEXTO_ORGAO_A_NOME_UNIDADE), + string(name: 'CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA', value: CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA), + string(name: 'CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA', value: CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA), + string(name: 'CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA', value: CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA), + string(name: 'CONTEXTO_ORGAO_B_NUMERO_SEI', value: CONTEXTO_ORGAO_B_NUMERO_SEI), + string(name: 'CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_B_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_B_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_B_ID_ESTRUTURA', value: CONTEXTO_ORGAO_B_ID_ESTRUTURA), + string(name: 'CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA', value: CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA), + string(name: 'CONTEXTO_ORGAO_B_NOME_UNIDADE', value: CONTEXTO_ORGAO_B_NOME_UNIDADE), + string(name: 'branchGitSpe', value: BRANCHGITSPE), + string(name: 'sistema', value: SISTEMA), + string(name: 'versaoModulo', value: VERSAOMODULO), + string(name: 'grupos_executar', value: "execute_alone_group4"), + ], wait: true + }} + + } + + stage("Grupo de Testes 7"){ + + steps{ + script{ + + def props = readProperties file: 'instanciaorgao13_14.props' + database = DATABASE + org1CertSecret = props['org1CertSecret'] + passCertOrg1 = props['passCertOrg1'] + org2CertSecret = props['org2CertSecret'] + passCertOrg2 = props['passCertOrg2'] + CONTEXTO_ORGAO_A_NUMERO_SEI = props['CONTEXTO_ORGAO_A_NUMERO_SEI'] + CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_A_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_A_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_A_ID_ESTRUTURA = props['CONTEXTO_ORGAO_A_ID_ESTRUTURA'] + CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA = props['CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA'] + CONTEXTO_ORGAO_A_NOME_UNIDADE = props['CONTEXTO_ORGAO_A_NOME_UNIDADE'] + CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA = props['CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA'] + CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA = props['CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA'] + CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA = props['CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA'] + CONTEXTO_ORGAO_B_NUMERO_SEI = props['CONTEXTO_ORGAO_B_NUMERO_SEI'] + CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_B_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_B_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_B_ID_ESTRUTURA = props['CONTEXTO_ORGAO_B_ID_ESTRUTURA'] + CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA = props['CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA'] + CONTEXTO_ORGAO_B_NOME_UNIDADE = props['CONTEXTO_ORGAO_B_NOME_UNIDADE'] + + build job: '01-Teste-Unico-ou-Grupo.groovy', + parameters: + [ + string(name: 'database', value: database), + string(name: 'org1CertSecret', value: org1CertSecret), + string(name: 'passCertOrg1', value: passCertOrg1), + string(name: 'org2CertSecret', value: org2CertSecret), + string(name: 'passCertOrg2', value: passCertOrg2), + string(name: 'CONTEXTO_ORGAO_A_NUMERO_SEI', value: CONTEXTO_ORGAO_A_NUMERO_SEI), + string(name: 'CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_A_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_A_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_A_ID_ESTRUTURA', value: CONTEXTO_ORGAO_A_ID_ESTRUTURA), + string(name: 'CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA', value: CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA), + string(name: 'CONTEXTO_ORGAO_A_NOME_UNIDADE', value: CONTEXTO_ORGAO_A_NOME_UNIDADE), + string(name: 'CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA', value: CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA), + string(name: 'CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA', value: CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA), + string(name: 'CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA', value: CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA), + string(name: 'CONTEXTO_ORGAO_B_NUMERO_SEI', value: CONTEXTO_ORGAO_B_NUMERO_SEI), + string(name: 'CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_B_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_B_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_B_ID_ESTRUTURA', value: CONTEXTO_ORGAO_B_ID_ESTRUTURA), + string(name: 'CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA', value: CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA), + string(name: 'CONTEXTO_ORGAO_B_NOME_UNIDADE', value: CONTEXTO_ORGAO_B_NOME_UNIDADE), + string(name: 'branchGitSpe', value: BRANCHGITSPE), + string(name: 'sistema', value: SISTEMA), + string(name: 'versaoModulo', value: VERSAOMODULO), + string(name: 'grupos_executar', value: "execute_alone_group5"), + ], wait: true + }} + + } + + stage("Grupo de Testes 8"){ + + steps{ + script{ + + def props = readProperties file: 'instanciaorgao15_16.props' + database = DATABASE + org1CertSecret = props['org1CertSecret'] + passCertOrg1 = props['passCertOrg1'] + org2CertSecret = props['org2CertSecret'] + passCertOrg2 = props['passCertOrg2'] + CONTEXTO_ORGAO_A_NUMERO_SEI = props['CONTEXTO_ORGAO_A_NUMERO_SEI'] + CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_A_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_A_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_A_ID_ESTRUTURA = props['CONTEXTO_ORGAO_A_ID_ESTRUTURA'] + CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA = props['CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA'] + CONTEXTO_ORGAO_A_NOME_UNIDADE = props['CONTEXTO_ORGAO_A_NOME_UNIDADE'] + CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA = props['CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA'] + CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA = props['CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA'] + CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA = props['CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA'] + CONTEXTO_ORGAO_B_NUMERO_SEI = props['CONTEXTO_ORGAO_B_NUMERO_SEI'] + CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_B_REP_ESTRUTURAS = props['CONTEXTO_ORGAO_B_REP_ESTRUTURAS'] + CONTEXTO_ORGAO_B_ID_ESTRUTURA = props['CONTEXTO_ORGAO_B_ID_ESTRUTURA'] + CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA = props['CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA'] + CONTEXTO_ORGAO_B_NOME_UNIDADE = props['CONTEXTO_ORGAO_B_NOME_UNIDADE'] + + build job: '01-Teste-Unico-ou-Grupo.groovy', + parameters: + [ + string(name: 'database', value: database), + string(name: 'org1CertSecret', value: org1CertSecret), + string(name: 'passCertOrg1', value: passCertOrg1), + string(name: 'org2CertSecret', value: org2CertSecret), + string(name: 'passCertOrg2', value: passCertOrg2), + string(name: 'CONTEXTO_ORGAO_A_NUMERO_SEI', value: CONTEXTO_ORGAO_A_NUMERO_SEI), + string(name: 'CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_A_ID_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_A_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_A_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_A_ID_ESTRUTURA', value: CONTEXTO_ORGAO_A_ID_ESTRUTURA), + string(name: 'CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA', value: CONTEXTO_ORGAO_A_SIGLA_UNIDADE_HIERARQUIA), + string(name: 'CONTEXTO_ORGAO_A_NOME_UNIDADE', value: CONTEXTO_ORGAO_A_NOME_UNIDADE), + string(name: 'CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA', value: CONTEXTO_ORGAO_A_ID_ESTRUTURA_SECUNDARIA), + string(name: 'CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA', value: CONTEXTO_ORGAO_A_NOME_UNIDADE_SECUNDARIA), + string(name: 'CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA', value: CONTEXTO_ORGAO_A_SIGLA_UNIDADE_SECUNDARIA_HIERARQUIA), + string(name: 'CONTEXTO_ORGAO_B_NUMERO_SEI', value: CONTEXTO_ORGAO_B_NUMERO_SEI), + string(name: 'CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_B_ID_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_B_REP_ESTRUTURAS', value: CONTEXTO_ORGAO_B_REP_ESTRUTURAS), + string(name: 'CONTEXTO_ORGAO_B_ID_ESTRUTURA', value: CONTEXTO_ORGAO_B_ID_ESTRUTURA), + string(name: 'CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA', value: CONTEXTO_ORGAO_B_SIGLA_UNIDADE_HIERARQUIA), + string(name: 'CONTEXTO_ORGAO_B_NOME_UNIDADE', value: CONTEXTO_ORGAO_B_NOME_UNIDADE), + string(name: 'branchGitSpe', value: BRANCHGITSPE), + string(name: 'sistema', value: SISTEMA), + string(name: 'versaoModulo', value: VERSAOMODULO), + string(name: 'grupos_executar', value: "execute_alone_group6"), + ], wait: true + }} + + } + + + + } + + } + + + + } + +} diff --git a/jenkins/03-Teste-Todos-os-Grupos-em-Serie.groovy b/jenkins/03-Teste-Todos-os-Grupos-em-Serie.groovy new file mode 100644 index 000000000..7ca34f767 --- /dev/null +++ b/jenkins/03-Teste-Todos-os-Grupos-em-Serie.groovy @@ -0,0 +1,104 @@ +/* + +Usuario jenkins precisa ter permissao de sudo +Jenkins minimo em 2.332 + +chama o job 02 de forma serializada + +*/ + +pipeline { + agent { + node{ + label "master" + } + } + + options { + disableConcurrentBuilds() + } + + parameters { + + string( + name: 'versoes', + defaultValue:"SPE=4.0.11,NOME_SPE=sei4,VERSAO_MODULO=master,BASE=mysql;SPE=4.0.12.15,NOME_SPE=sei4,VERSAO_MODULO=master,BASE=mysql;", + description: "Lista de versoes do SPE e modulo no formato como exemplo acima, separados por ;") + + + } + + stages { + + + + stage("Preparar execucao"){ + + steps{ + + script{ + + if ( env.BUILD_NUMBER == '1' ){ + currentBuild.result = 'ABORTED' + warning('Informe os valores de parametro iniciais. Caso eles n tenham aparecido faça login novamente') + } + + QTDTENTATIVAS=0 + VERSOES_STRING = params.versoes + arrGeneral = VERSOES_STRING.split(';') + + buildDescription "Versoes: ${VERSOES_STRING}" + + } + + } + + } + + stage("Executar nas Bases"){ + steps { + script { + + def paramValue + def spe_branch + def spe_controle_versao + def modulo_versao + def database + + for (int i = 0; i < arrGeneral.length; i++) { + paramValue = arrGeneral[i].split(',') + spe_branch = paramValue[0].split('=')[1] + spe_nome = paramValue[1].split('=')[1] + modulo_versao = paramValue[2].split('=')[1] + database = paramValue[3].split('=')[1] + + stage("Montando Ambiente Rodando Testes ${paramValue[0]} / ${paramValue[1]} / ${paramValue[2]}" ) { + + warnError('Erro no build!'){ + + retry(QTDTENTATIVAS){ + + + build job: '02-Teste-Todos-os-Grupos.groovy', + parameters: + [ + string(name: 'branchGitSpe', value: spe_branch), + string(name: 'sistema', value: spe_nome), + string(name: 'versaoModulo', value: modulo_versao), + ], wait: true + } + + } + + } + + + } + + } + } + + } + } + +} diff --git a/jenkins/01-Simples.groovy b/jenkins/oldJobs/01-Simples.groovy similarity index 100% rename from jenkins/01-Simples.groovy rename to jenkins/oldJobs/01-Simples.groovy diff --git a/jenkins/02-TodasBases.groovy b/jenkins/oldJobs/02-TodasBases.groovy similarity index 100% rename from jenkins/02-TodasBases.groovy rename to jenkins/oldJobs/02-TodasBases.groovy diff --git a/jenkins/03-TodasVersoes.groovy b/jenkins/oldJobs/03-TodasVersoes.groovy similarity index 100% rename from jenkins/03-TodasVersoes.groovy rename to jenkins/oldJobs/03-TodasVersoes.groovy diff --git a/tests_sei41/funcional/assets/arquivos/arquivo_pequeno.txt b/tests_sei41/funcional/assets/arquivos/arquivo_pequeno.txt new file mode 100755 index 000000000..376b92666 --- /dev/null +++ b/tests_sei41/funcional/assets/arquivos/arquivo_pequeno.txt @@ -0,0 +1 @@ +arquivo pequeno diff --git a/tests_sei41/funcional/assets/arquivos/arquivo_pequeno_A.pdf b/tests_sei41/funcional/assets/arquivos/arquivo_pequeno_A.pdf new file mode 100755 index 000000000..2f19792f9 Binary files /dev/null and b/tests_sei41/funcional/assets/arquivos/arquivo_pequeno_A.pdf differ diff --git a/tests_sei41/funcional/assets/arquivos/arquivo_pequeno_B.pdf b/tests_sei41/funcional/assets/arquivos/arquivo_pequeno_B.pdf new file mode 100755 index 000000000..1d1d62b35 Binary files /dev/null and b/tests_sei41/funcional/assets/arquivos/arquivo_pequeno_B.pdf differ diff --git a/tests_sei41/funcional/assets/arquivos/arquivo_pequeno_C.pdf b/tests_sei41/funcional/assets/arquivos/arquivo_pequeno_C.pdf new file mode 100755 index 000000000..01bc7f65c Binary files /dev/null and b/tests_sei41/funcional/assets/arquivos/arquivo_pequeno_C.pdf differ diff --git a/tests_sei41/funcional/assets/arquivos/test_files_index.txt b/tests_sei41/funcional/assets/arquivos/test_files_index.txt new file mode 100755 index 000000000..049632cb7 --- /dev/null +++ b/tests_sei41/funcional/assets/arquivos/test_files_index.txt @@ -0,0 +1,10 @@ +https://archive.org/download/arquivo_pdf_testes/arquivo_pequeno.txt +https://archive.org/download/arquivo_pdf_testes/arquivo_pequeno_A.pdf +https://archive.org/download/arquivo_pdf_testes/arquivo_pequeno_B.pdf +https://archive.org/download/arquivo_pdf_testes/arquivo_pequeno_C.pdf +https://archive.org/download/arquivo_pdf_testes/arquivo_001.pdf +https://archive.org/download/arquivo_pdf_testes/arquivo_003.pdf +https://archive.org/download/arquivo_pdf_testes/arquivo_020.pdf +https://archive.org/download/arquivo_pdf_testes/arquivo_060.pdf +https://archive.org/download/arquivo_pdf_testes/arquivo_corrompimento_besimplesoap.pdf +https://archive.org/download/arquivo_pdf_testes/arquivo_extensao_nao_permitida.docx diff --git a/tests_sei41/funcional/src/paginas/PaginaProcesso.php b/tests_sei41/funcional/src/paginas/PaginaProcesso.php index 0167581e4..2b2990670 100755 --- a/tests_sei41/funcional/src/paginas/PaginaProcesso.php +++ b/tests_sei41/funcional/src/paginas/PaginaProcesso.php @@ -184,6 +184,8 @@ public function ehDocumentoCancelado($nomeDocumentoArvore) { try { + $to = $this->test->timeouts()->getLastImplicitWaitValue(); + $this->test->timeouts()->implicitWait(300); $this->test->frame(null); $this->test->frame("ifrArvore"); $this->test->byLinkText($nomeDocumentoArvore)->byXPath(".//preceding-sibling::a[1]/img[contains(@src,'svg/documento_cancelado.svg?')]"); @@ -192,13 +194,17 @@ public function ehDocumentoCancelado($nomeDocumentoArvore) catch(Exception $e) { return false; - } + }finally{ + $this->test->timeouts()->implicitWait($to); + } } public function ehDocumentoMovido($nomeDocumentoArvore) { try { + $to = $this->test->timeouts()->getLastImplicitWaitValue(); + $this->test->timeouts()->implicitWait(300); $this->test->frame(null); $this->test->frame("ifrArvore"); $this->test->byLinkText($nomeDocumentoArvore)->byXPath(".//preceding-sibling::a[1]/img[contains(@src,'svg/documento_movido.svg?')]"); @@ -207,7 +213,9 @@ public function ehDocumentoMovido($nomeDocumentoArvore) catch(Exception $e) { return false; - } + }finally{ + $this->test->timeouts()->implicitWait($to); + } } private function selecionarItemArvore($nomeArvore) diff --git a/tests_sei41/funcional/src/paginas/PaginaReciboTramite.php b/tests_sei41/funcional/src/paginas/PaginaReciboTramite.php index d2d517870..412a64f86 100755 --- a/tests_sei41/funcional/src/paginas/PaginaReciboTramite.php +++ b/tests_sei41/funcional/src/paginas/PaginaReciboTramite.php @@ -27,17 +27,23 @@ public function contemTramite($mensagemTramite, $verificaReciboEnvio=false, $ver //Verifica se recibo de envio do processo foi localizado if($result && $verificaReciboEnvio) { try{ + $to = $this->test->timeouts()->getLastImplicitWaitValue(); + $this->test->timeouts()->implicitWait(300); $colunas[1]->element($this->test->using('css selector')->value(utf8_encode('a > img[title=\'Recibo de Confirmação de Envio\']'))); } catch(Exception $e){ $result = false; } + finally{ $this->test->timeouts()->implicitWait($to); } } //Verifica se recibo de conclusão do trâmite processo foi localizado if($result && $verificaReciboConclusao) { try{ + $to = $this->test->timeouts()->getLastImplicitWaitValue(); + $this->test->timeouts()->implicitWait(300); $colunas[1]->element($this->test->using('css selector')->value(utf8_encode('a > img[title=\'Recibo de Conclusão de Trâmite\']'))); } catch(Exception $e){ $result = false; } + finally{ $this->test->timeouts()->implicitWait($to); } } if($result) { diff --git a/tests_sei41/funcional/tests/MapeamentoTipoProcessoDesativarReativarTest.php b/tests_sei41/funcional/tests/MapeamentoTipoProcessoDesativarReativarTest.php index 77bb55e7b..6aac207c1 100644 --- a/tests_sei41/funcional/tests/MapeamentoTipoProcessoDesativarReativarTest.php +++ b/tests_sei41/funcional/tests/MapeamentoTipoProcessoDesativarReativarTest.php @@ -3,6 +3,9 @@ /** * Testes de mapeamento de tipos de processo e relacionamento entre orgãos * Desativar e reativar mapeamento entre orgãos + * + * Execution Groups + * @group execute_alone_group1 */ class MapeamentoTipoProcessoDesativarReativarTest extends CenarioBaseTestCase { diff --git a/tests_sei41/funcional/tests/MapeamentoTipoProcessoExcluirTest.php b/tests_sei41/funcional/tests/MapeamentoTipoProcessoExcluirTest.php index aeceb96fb..ddbcf101e 100644 --- a/tests_sei41/funcional/tests/MapeamentoTipoProcessoExcluirTest.php +++ b/tests_sei41/funcional/tests/MapeamentoTipoProcessoExcluirTest.php @@ -3,6 +3,9 @@ /** * Testes de mapeamento de tipos de processo e relacionamento entre orgãos * Excluir mapeamento entre orgãos + * + * Execution Groups + * @group execute_alone_group1 */ class MapeamentoTipoProcessoExcluirTest extends CenarioBaseTestCase { diff --git a/tests_sei41/funcional/tests/MapeamentoTipoProcessoExportarTest.php b/tests_sei41/funcional/tests/MapeamentoTipoProcessoExportarTest.php index 4c237b093..cdc81f23a 100644 --- a/tests_sei41/funcional/tests/MapeamentoTipoProcessoExportarTest.php +++ b/tests_sei41/funcional/tests/MapeamentoTipoProcessoExportarTest.php @@ -4,6 +4,9 @@ * Testes de mapeamento de tipos de processo e relacionamento entre orgãos * Exportar tipos de processos * Pesquisar tipos de processos + * + * Execution Groups + * @group execute_alone_group1 */ class MapeamentoTipoProcessoExportarTest extends CenarioBaseTestCase { diff --git a/tests_sei41/funcional/tests/MapeamentoTipoProcessoReativarTest.php b/tests_sei41/funcional/tests/MapeamentoTipoProcessoReativarTest.php index 9543d181c..1ff853313 100644 --- a/tests_sei41/funcional/tests/MapeamentoTipoProcessoReativarTest.php +++ b/tests_sei41/funcional/tests/MapeamentoTipoProcessoReativarTest.php @@ -3,6 +3,9 @@ /** * Testes de mapeamento de tipos de processo reativar * Reativar tipos de processos + * + * Execution Groups + * @group execute_alone_group1 */ class MapeamentoTipoProcessoReativarTest extends CenarioBaseTestCase { diff --git a/tests_sei41/funcional/tests/MapeamentoTipoProcessoRelacionamentoOrgaosCadastroTest.php b/tests_sei41/funcional/tests/MapeamentoTipoProcessoRelacionamentoOrgaosCadastroTest.php index 638ef3559..c307a93ea 100644 --- a/tests_sei41/funcional/tests/MapeamentoTipoProcessoRelacionamentoOrgaosCadastroTest.php +++ b/tests_sei41/funcional/tests/MapeamentoTipoProcessoRelacionamentoOrgaosCadastroTest.php @@ -3,6 +3,9 @@ /** * Testes de mapeamento de tipos de processo e relacionamento entre orgãos * Cadastro mapeamento de orgãos + * + * Execution Groups + * @group execute_alone_group1 */ class MapeamentoTipoProcessoRelacionamentoOrgaosCadastroTest extends CenarioBaseTestCase { diff --git a/tests_sei41/funcional/tests/MapeamentoTipoProcessoRelacionamentoOrgaosListagemImportacaoTest.php b/tests_sei41/funcional/tests/MapeamentoTipoProcessoRelacionamentoOrgaosListagemImportacaoTest.php index 8b5be9979..00dd0b47c 100644 --- a/tests_sei41/funcional/tests/MapeamentoTipoProcessoRelacionamentoOrgaosListagemImportacaoTest.php +++ b/tests_sei41/funcional/tests/MapeamentoTipoProcessoRelacionamentoOrgaosListagemImportacaoTest.php @@ -4,6 +4,9 @@ * Testes de mapeamento de tipos de processo e relacionamento entre orgãos * Listar mapeamento entre orgãos * Importar tipos de processo para relacionamento + * + * Execution Groups + * @group execute_alone_group1 */ class MapeamentoTipoProcessoRelacionamentoOrgaosListagemImportacaoTest extends CenarioBaseTestCase { diff --git a/tests_sei41/funcional/tests/RecebimentoRecusaJustificativaGrandeTest.php b/tests_sei41/funcional/tests/RecebimentoRecusaJustificativaGrandeTest.php index bbe6bda67..dfe3006c0 100755 --- a/tests_sei41/funcional/tests/RecebimentoRecusaJustificativaGrandeTest.php +++ b/tests_sei41/funcional/tests/RecebimentoRecusaJustificativaGrandeTest.php @@ -2,6 +2,10 @@ use \utilphp\util; +/** + * Execution Groups + * @group execute_alone_group4 + */ class RecebimentoRecusaJustificativaGrandeTest extends CenarioBaseTestCase { diff --git a/tests_sei41/funcional/tests/TramiteProcessoAnexadoComDevolucaoTest.php b/tests_sei41/funcional/tests/TramiteProcessoAnexadoComDevolucaoTest.php index 7a66ca7a6..e9604e732 100755 --- a/tests_sei41/funcional/tests/TramiteProcessoAnexadoComDevolucaoTest.php +++ b/tests_sei41/funcional/tests/TramiteProcessoAnexadoComDevolucaoTest.php @@ -2,6 +2,8 @@ /** * Testes de trâmite de processos anexado considerando a devolução do mesmo para a entidade de origem + * Execution Groups + * @group execute_alone_group4 */ class TramiteProcessoAnexadoComDevolucaoTest extends CenarioBaseTestCase { diff --git a/tests_sei41/funcional/tests/TramiteProcessoAnexadoTest.php b/tests_sei41/funcional/tests/TramiteProcessoAnexadoTest.php index f1e997482..5ebaa1cfc 100755 --- a/tests_sei41/funcional/tests/TramiteProcessoAnexadoTest.php +++ b/tests_sei41/funcional/tests/TramiteProcessoAnexadoTest.php @@ -2,6 +2,9 @@ /** * Testes de trâmite de processos anexado + * + * Execution Groups + * @group execute_parallel_group2 */ class TramiteProcessoAnexadoTest extends CenarioBaseTestCase { diff --git a/tests_sei41/funcional/tests/TramiteProcessoComCancelamentoTest.php b/tests_sei41/funcional/tests/TramiteProcessoComCancelamentoTest.php index 05f9c24c4..aa8c96d79 100755 --- a/tests_sei41/funcional/tests/TramiteProcessoComCancelamentoTest.php +++ b/tests_sei41/funcional/tests/TramiteProcessoComCancelamentoTest.php @@ -1,5 +1,11 @@