br.gov.jfrj.siga.dp.dao.CpDaoTest.java Source code

Java tutorial

Introduction

Here is the source code for br.gov.jfrj.siga.dp.dao.CpDaoTest.java

Source

/*******************************************************************************
 * Copyright (c) 2006 - 2011 SJRJ.
 * 
 *     This file is part of SIGA.
 * 
 *     SIGA is free software: you can redistribute it and/or modify
 *     it under the terms of the GNU General Public License as published by
 *     the Free Software Foundation, either version 3 of the License, or
 *     (at your option) any later version.
 * 
 *     SIGA is distributed in the hope that it will be useful,
 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *     GNU General Public License for more details.
 * 
 *     You should have received a copy of the GNU General Public License
 *     along with SIGA.  If not, see <http://www.gnu.org/licenses/>.
 ******************************************************************************/
package br.gov.jfrj.siga.dp.dao;

import java.lang.reflect.InvocationTargetException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import junit.framework.TestCase;

import org.apache.commons.beanutils.PropertyUtils;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.dialect.Dialect;
import org.hibernate.jdbc.Work;
import org.hibernate.tool.hbm2ddl.DatabaseMetadata;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import br.gov.jfrj.siga.base.AplicacaoException;
import br.gov.jfrj.siga.base.Criptografia;
import br.gov.jfrj.siga.cp.CpConfiguracao;
import br.gov.jfrj.siga.cp.CpGrupo;
import br.gov.jfrj.siga.cp.CpGrupoDeEmail;
import br.gov.jfrj.siga.cp.CpIdentidade;
import br.gov.jfrj.siga.cp.CpServico;
import br.gov.jfrj.siga.cp.CpTipoGrupo;
import br.gov.jfrj.siga.cp.CpTipoServico;
import br.gov.jfrj.siga.cp.bl.Cp;
import br.gov.jfrj.siga.cp.bl.CpAmbienteEnumBL;
import br.gov.jfrj.siga.dp.CpOrgaoUsuario;
import br.gov.jfrj.siga.dp.CpTipoLotacao;
import br.gov.jfrj.siga.dp.DpPessoa;
import br.gov.jfrj.siga.model.Objeto;
import br.gov.jfrj.siga.model.dao.DaoFiltro;
import br.gov.jfrj.siga.model.dao.HibernateUtil;

public class CpDaoTest extends TestCase {

    private static final String NOVA_SENHA = "123456";
    private static final String CPF = "11111111111";
    private static final String LOGIN = "RJ11111";
    private CpDao dao;

    //   public CpDaoTest() throws Exception {
    //      // HibernateUtil
    //      // .configurarHibernate("/br/gov/jfrj/siga/hibernate/hibernate.cfg.xml",
    //      // ExMarca.class, CpMarca.class);
    //      CpAmbienteEnumBL ambiente = CpAmbienteEnumBL.DESENVOLVIMENTO;
    //      Cp.getInstance().getProp().setPrefixo(ambiente.getSigla());
    //      /*
    //       * AnnotationConfiguration cfg = CpDao.criarHibernateCfg(
    //       * "jdbc:oracle:thin:@servidor:1521:instancia", "usuario", "senha");
    //       */
    //      Configuration cfg = CpDao.criarHibernateCfg(ambiente);
    //      // CpDao.configurarHibernateParaDebug(cfg);
    //      HibernateUtil.configurarHibernate(cfg, "");
    //
    //      dao = CpDao.getInstance();
    //   }

    public void testGravarGrupoEPegarDataDeAtualizacao() throws AplicacaoException {
        Date dt2 = dao.consultarDataUltimaAtualizacao();

        CpTipoGrupo tpGrp = dao.consultar(CpTipoGrupo.TIPO_GRUPO_GRUPO_DE_DISTRIBUICAO, CpTipoGrupo.class, false);
        dao.iniciarTransacao();

        CpGrupo grpNovo = new CpGrupoDeEmail();
        grpNovo.setCpTipoGrupo(tpGrp);
        grpNovo.setOrgaoUsuario(dao.consultar(1L, CpOrgaoUsuario.class, false));
        grpNovo.setHisDtIni(dao.consultarDataEHoraDoServidor());
        grpNovo.setCpGrupoPai(null);
        grpNovo.setDscGrupo("Teste");
        grpNovo.setSiglaGrupo("TESTE");
        grpNovo = (CpGrupo) dao.gravarComHistorico(grpNovo, null);
        Long idCpGrupo = grpNovo.getIdGrupo();

        // CpGrupo grpTest = CpDao.getInstance().consultar(idCpGrupo,
        // CpGrupo.class, false);

        Date dt1 = dao.consultarDataUltimaAtualizacao();
    }

    public void testGravarGrupoEAtualizar() throws AplicacaoException, Exception, IllegalAccessException {

        CpTipoGrupo tpGrp = dao.consultar(CpTipoGrupo.TIPO_GRUPO_GRUPO_DE_DISTRIBUICAO, CpTipoGrupo.class, false);
        dao.iniciarTransacao();

        CpGrupo grpNovo = new CpGrupoDeEmail();
        grpNovo.setCpTipoGrupo(tpGrp);
        grpNovo.setOrgaoUsuario(dao.consultar(1L, CpOrgaoUsuario.class, false));
        grpNovo.setCpGrupoPai(null);
        grpNovo.setDscGrupo("Teste");
        grpNovo.setSiglaGrupo("TESTE");
        grpNovo = (CpGrupo) dao.gravarComHistorico(grpNovo, null, null, null);
        Long idCpGrupo = grpNovo.getIdGrupo();

        // dao.commitTransacao();

        CpGrupo grp = grpNovo;
        grpNovo = grp.getClass().newInstance();
        PropertyUtils.copyProperties(grpNovo, grp);
        grpNovo.setIdGrupo(null);
        grpNovo.setCpGrupoPai(null);
        grpNovo.setDscGrupo("Teste");
        grpNovo.setSiglaGrupo("TESTE");

        // dao.iniciarTransacao();
        grp = (CpGrupo) dao.gravarComHistorico(grpNovo, grp, null, null);

    }

    public void testAtualizarGrupoSemAlteracao() throws AplicacaoException, Exception, IllegalAccessException {

        dao.iniciarTransacao();

        CpGrupo grpIni = dao.listarGruposDeEmail().get(0);

        CpGrupo grp = (CpGrupo) Objeto.getImplementation(dao.consultar(grpIni.getId(), CpGrupo.class, false));
        CpGrupo grpNovo = ((CpGrupo) Objeto.getImplementation(grp)).getClass().newInstance();
        PropertyUtils.copyProperties(grpNovo, grp);
        grpNovo.setIdGrupo(null);
        CpGrupo grpRecebido = (CpGrupo) dao.gravarComHistorico(grpNovo, grp, null, null);

        assertEquals(grpRecebido, grp);
    }

    public void testAtualizarGrupoComAlteracao() throws AplicacaoException, Exception, IllegalAccessException {

        dao.iniciarTransacao();

        CpGrupo grpIni = dao.listarGruposDeEmail().get(0);

        CpGrupo grp = (CpGrupo) Objeto.getImplementation(dao.consultar(grpIni.getId(), CpGrupo.class, false));
        CpGrupo grpNovo = ((CpGrupo) Objeto.getImplementation(grp)).getClass().newInstance();
        PropertyUtils.copyProperties(grpNovo, grp);
        grpNovo.setIdGrupo(null);
        grpNovo.setDscGrupo(grp.getDscGrupo() + ".");
        CpGrupo grpRecebido = (CpGrupo) dao.gravarComHistorico(grpNovo, grp, null, null);

        assertEquals(grpRecebido, grpNovo);
    }

    public void testPesquisarConfiguracaoPorTipoLotacao()
            throws AplicacaoException, Exception, IllegalAccessException {
        CpTipoLotacao t_ctlTipoLotacao = dao.consultar(101L, CpTipoLotacao.class, false);
        final Query query = dao.getSessao().getNamedQuery("consultarCpConfiguracoesPorTipoLotacao");
        query.setLong("idTpLotacao", t_ctlTipoLotacao.getIdTpLotacao());
        ArrayList<CpConfiguracao> t_arlConfigServicos = (ArrayList<CpConfiguracao>) query.list();
        ArrayList<CpServico> t_arlServicos = new ArrayList<CpServico>();
        for (CpConfiguracao t_cfgConfiguracao : t_arlConfigServicos) {
            t_arlServicos.add(t_cfgConfiguracao.getCpServico());
        }
        assertTrue(t_arlServicos.size() > 0);
    }

    public void testConsultarTipoServico() {
        CpTipoServico tpsrv = dao.consultar(CpTipoServico.TIPO_CONFIG_SISTEMA, CpTipoServico.class, false);
        assertNotNull(tpsrv);
    }

    /*
     * O MTODO testBL foi DESATIVADO pois est usando a conta de um usurio
     * real e, alm disso, disparando e-mais por causa das trocas de senha e
     * criao de identidades. Esse teste deve ser REFATORADO para fazer parte
     * da integrao contnua.
     */
    public void __DESATIVADO__testBL() throws AplicacaoException, Exception, IllegalAccessException {

        // Carrega uma identidade ativa
        CpIdentidade idAntiga = null;
        try {
            idAntiga = dao.consultaIdentidadeCadastrante(LOGIN, true);
        } catch (Exception e) {
        }

        // Cancela a identidade
        if (idAntiga != null) {
            CpIdentidade idCancelada = null;
            Cp.getInstance().getBL().cancelarIdentidade(idAntiga, null);
            try {
                idCancelada = dao.consultaIdentidadeCadastrante(LOGIN, true);
            } catch (Exception e) {
            }
            assertNull(idCancelada);
        }

        // Cria uma nova identidade
        CpIdentidade idNova = Cp.getInstance().getBL().criarIdentidade(LOGIN, CPF, null, null, null, false);
        assertTrue(idNova.getDscSenhaIdentidade().length() > 0);

        // Altera a identidade
        Date dt = dao.consultarDataEHoraDoServidor();
        Calendar c = Calendar.getInstance();
        c.setTime(dt);
        c.add(Calendar.YEAR, 1);
        CpIdentidade idAlterada = Cp.getInstance().getBL().alterarIdentidade(idNova, c.getTime(), null);
        assertEquals(idAlterada.getDtExpiracaoIdentidade(), c.getTime());

        // Se no h alterao, a ID deve ser mantida
        CpIdentidade idAlterada2 = Cp.getInstance().getBL().alterarIdentidade(idAlterada, c.getTime(), null);
        assertEquals(idAlterada.getId(), idAlterada2.getId());

        // Altera novamente e verifica se foi criada uma nova ID
        CpIdentidade idAlterada3 = Cp.getInstance().getBL().alterarIdentidade(idAlterada, null, null);
        assertFalse(idAlterada3.getId().equals(idAlterada2.getId()));

        // Verificar se a busca por identidades retorna somente um item
        List<CpIdentidade> l = dao.consultaIdentidades(idAlterada.getDpPessoa());
        assertEquals(l.size(), 1);

        // A identidade est bloqueada?
        assertFalse(idAlterada.isBloqueada());

        // A pessoa est bloqueada?
        assertFalse(idAlterada.getDpPessoa().isBloqueada());

        // Bloquear a identidade
        Cp.getInstance().getBL().bloquearIdentidade(idAlterada, null, true);
        assertTrue(idAlterada.isBloqueada());
        assertFalse(idAlterada.getDpPessoa().isBloqueada());

        // Desbloquear a identidade
        Cp.getInstance().getBL().bloquearIdentidade(idAlterada, null, false);
        assertFalse(idAlterada.isBloqueada());
        assertFalse(idAlterada.getDpPessoa().isBloqueada());

        // Bloquear a pessoa
        Cp.getInstance().getBL().bloquearPessoa(idAlterada.getDpPessoa(), null, true);
        assertTrue(idAlterada.isBloqueada());
        assertTrue(idAlterada.getDpPessoa().isBloqueada());

        // Desnloquear a pessoa
        Cp.getInstance().getBL().bloquearPessoa(idAlterada.getDpPessoa(), null, false);
        assertFalse(idAlterada.getDpPessoa().isBloqueada());

        // Depois de desbloquear a pessoa, a identidade continua bloqueada. Por
        // isso, temos que desbloquea-la tb.
        assertTrue(idAlterada.isBloqueada());
        Cp.getInstance().getBL().bloquearIdentidade(idAlterada, null, false);
        assertFalse(idAlterada.isBloqueada());

        /*
         * O TESTE DE TROCA DE SENHA ABAIXO FOI DESATIVADO, PORQUE SEMPRE ENVIA
         * E-MAIL PARA O USURIOCOM O BUILD AUTOMATICO DA FERRAMENTA HUDSON(CI).
         */
        // Troca a senha
        String senha = decodificarSenha(idAlterada);
        CpIdentidade idNovaSenha = Cp.getInstance().getBL().trocarSenhaDeIdentidade(senha, NOVA_SENHA, NOVA_SENHA,
                LOGIN, null);
        assertEquals(decodificarSenha(idNovaSenha), NOVA_SENHA);

    }

    private String decodificarSenha(CpIdentidade id) throws Exception {
        BASE64Decoder b64dec = new BASE64Decoder();
        BASE64Encoder b64enc = new BASE64Encoder();
        String chave = b64enc.encode(id.getDpPessoa().getIdInicial().toString().getBytes());
        String senha = new String(
                Criptografia.desCriptografar(b64dec.decodeBuffer(id.getDscSenhaIdentidadeCripto()), chave));

        return senha;
    }

    // Esse teste deve ficar sempre desativado. Caso ele seja executado, todas
    // as senhas sero lidas do esquema "ACESSO_TOMCAT" e depois sero escritas
    // identidades no esquema "CORPORATIVO"
    // public void testImportarAcessoTomcar() throws AplicacaoException,
    // Exception, IllegalAccessException {
    // dao.iniciarTransacao();
    // dao.importarAcessoTomcat();
    // dao.commitTransacao();
    // }

    // public void testRelAlteracaoDeAcesso() throws AplicacaoException,
    // Exception, IllegalAccessException {
    // Map<String, String> listaParametros = new HashMap<String, String>();
    // listaParametros.put("dataInicio", "06/01/2011");
    // listaParametros.put("dataFim", "06/01/2011");
    // listaParametros.put("idOrgaoUsuario", "1");
    // AlteracaoDireitosRelatorio rel = new AlteracaoDireitosRelatorio(
    // listaParametros);
    // rel.gerar();
    // }

    // public void testRelHistoricoUsuario() throws AplicacaoException,
    // Exception, IllegalAccessException {
    // Map<String, String> listaParametros = new HashMap<String, String>();
    // listaParametros.put("idPessoa", "160632");
    // HistoricoUsuarioRelatorio rel = new HistoricoUsuarioRelatorio(
    // listaParametros);
    // rel.gerar();
    // }

    /**
     * @param args
     * @throws Exception
     * @throws NoSuchMethodException
     * @throws InvocationTargetException
     * @throws IllegalAccessException
     * @throws SecurityException
     */
    //   public static void main(String[] args) throws SecurityException,
    //   IllegalAccessException, InvocationTargetException,
    //   NoSuchMethodException, Exception {
    //
    //      CpAmbienteEnumBL ambiente = CpAmbienteEnumBL.DESENVOLVIMENTO;
    //      Cp.getInstance().getProp().setPrefixo(ambiente.getSigla());
    //
    //      Configuration cfg = CpDao.criarHibernateCfg(ambiente);
    //      HibernateUtil.configurarHibernate(cfg, "");
    //
    //      CpDao dao = CpDao.getInstance();
    //
    //      System.out.println("Data e hora da ultima atualizao - "
    //            + dao.consultarDataUltimaAtualizacao());
    //
    //      dao.iniciarTransacao();
    //      // dao.importarAcessoTomcat();
    //      dao.commitTransacao();
    //
    //      if (true)
    //         return;
    //
    //      CpServico ser = dao.consultar(3L, CpServico.class, false);
    //      System.out.println(ser.getSiglaServico() + " - " + ser.getDscServico());
    //
    //      DpPessoa pesSigla = new DpPessoa();
    //      pesSigla.setSesbPessoa("RJ");
    //      pesSigla.setMatricula(13635L);
    //      DpPessoa pes = dao.consultarPorSigla(pesSigla);
    //
    //      System.out.println(pes.getSigla() + " - " + pes.getDescricao());
    //      System.out.println(pes.getCargo().getDescricao());
    //      System.out.println(pes.getFuncaoConfianca().getDescricao());
    //      System.out.println(pes.getLotacao().getSigla() + " - "
    //            + pes.getLotacao().getDescricao());
    //
    //      DpPessoaDaoFiltro flt = new DpPessoaDaoFiltro();
    //      flt.setSigla(LOGIN);
    //      System.out.print("consultarQuantidade: ");
    //      System.out.println(dao.consultarQuantidade((DaoFiltro) flt));
    //
    //      CpDao.freeInstance();
    //   }

    public static void printSchema(SessionFactory fact, Configuration cfg) {
        Dialect dialect = Dialect.getDialect(cfg.getProperties());
        // printDropSchemaScript(cfg, dialect);
        // printSchemaCreationScript(cfg, dialect);
        printSchemaUpdateScript(fact, cfg, dialect);
    }

    public static void printSchemaCreationScript(final Configuration cfg, final Dialect dialect) {
        String[] schemaCreationScript = cfg.generateSchemaCreationScript(dialect);
        for (String stmt : schemaCreationScript) {
            System.out.println(stmt + ";");
        }
    }

    public static void printDropSchemaScript(final Configuration cfg, final Dialect dialect) {
        String[] dropSchemaScript = cfg.generateDropSchemaScript(dialect);
        for (String stmt : dropSchemaScript) {
            System.out.println(stmt + ";");
        }
    }

    public static void printSchemaUpdateScript(final SessionFactory sf, final Configuration cfg,
            final Dialect dialect) {
        try {
            HibernateUtil.getSessao().doWork(new Work() {
                public void execute(Connection connection) throws SQLException {
                    DatabaseMetadata metadata;
                    metadata = new DatabaseMetadata(connection, dialect);
                    String[] schemaUpdateScript = cfg.generateSchemaUpdateScript(dialect, metadata);
                    for (String stmt : schemaUpdateScript) {
                        System.out.println(stmt + ";");
                    }
                }
            });

        } catch (HibernateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}