Package com.google.sitebricks.persist.sql

Source Code of com.google.sitebricks.persist.sql.SqlMultipleStoreIntegrationTest

package com.google.sitebricks.persist.sql;

import com.google.common.collect.ImmutableMap;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.sitebricks.persist.EntityStore;
import com.google.sitebricks.persist.PersistAopModule;
import com.google.sitebricks.persist.Persister;
import com.google.sitebricks.persist.Work;
import com.jolbox.bonecp.BoneCPConfig;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import javax.inject.Inject;
import javax.inject.Provider;
import java.lang.annotation.Annotation;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;

import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertFalse;
import static org.testng.AssertJUnit.assertTrue;

/**
* @author dhanji@gmail.com (Dhanji R. Prasanna)
*/
public class SqlMultipleStoreIntegrationTest {
  public static final String A_NAME = "Jason Van Zyl";
  private static final String ANOTHER_NAME = "Jason";

  public static class SqlSaver {
    @Inject @Db1
    Provider<Sql> sql1;

    @Inject @Db2
    Provider<Sql> sql2;

    @Work @Db2
    public void make() {
      sql2.get().execute("insert into my_table (id, name) values (1, @name)",
          ImmutableMap.<String, Object>of("name", A_NAME));
    }

    @Work @Db1
    public void make1() {
      sql1.get().execute("insert into my_table (id, name) values (1, @name)",
          ImmutableMap.<String, Object>of("name", ANOTHER_NAME));
    }

    @Work @Db2
    public String find() {
      List<Map<String,Object>> list = sql2.get().list("select * from my_table");
      assertFalse(list.isEmpty());
      return list.iterator().next().get("name").toString();
    }

    @Work @Db1
    public String find1() {
      List<Map<String,Object>> list = sql1.get().list("select * from my_table");
      assertFalse(list.isEmpty());
      return list.iterator().next().get("name").toString();
    }
  }

  private BoneCPConfig config1;
  private BoneCPConfig config2;

  @BeforeMethod
  public final void pre() {
    config1 = new BoneCPConfig();
    config1.setJdbcUrl("jdbc:hsqldb:mem:muldb1;sql.syntax_mys=true");
    config1.setUsername("sa");
    config1.setPassword("");
    config1.setPartitionCount(1);
    config1.setMaxConnectionsPerPartition(2);

    config2 = new BoneCPConfig();
    config2.setJdbcUrl("jdbc:hsqldb:mem:muldb2;sql.syntax_mys=true");
    config2.setUsername("sa");
    config2.setPassword("");
    config2.setPartitionCount(1);
    config2.setMaxConnectionsPerPartition(2);
  }

  private static void createTable(Injector injector, Class<? extends Annotation> selector) {
    Persister persister = injector.getInstance(Key.get(Persister.class, selector));
    persister.call(new Persister.InWork() {
      @Override
      public Object perform(EntityStore es) throws Throwable {
        ((Sql) es.delegate()).execute("create table my_table (id integer, name text not null)");
        return null;
      }
    });

    final AtomicBoolean tableExists = new AtomicBoolean();
    persister.call(new Persister.InWork() {
      @Override
      public Object perform(EntityStore es) throws Throwable {
        tableExists.set(((Sql) es.delegate()).tableExists("my_table"));
        return null;
      }
    });

    assertTrue(tableExists.get());
  }

  @Test
  public final void storeAndRetrieve() {
    SqlModule db1Module = new SqlModule(Db1.class, config1);
    SqlModule db2Module = new SqlModule(Db2.class, config2);

    Injector injector = Guice.createInjector(
        db2Module,
        db1Module,
        new PersistAopModule(db2Module),
        new PersistAopModule(db1Module));
    createTable(injector, Db1.class);
    createTable(injector, Db2.class);

    SqlSaver saver = injector.getInstance(SqlSaver.class);

    saver.make();
    saver.make1();

    assertEquals(A_NAME, saver.find());
    assertEquals(ANOTHER_NAME, saver.find1());
  }
}
TOP

Related Classes of com.google.sitebricks.persist.sql.SqlMultipleStoreIntegrationTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.