Coverage Summary for Class: TestDataSource (org.umlg.sqlg.test.datasource)

Class Class, % Method, % Branch, % Line, %
TestDataSource 0% (0/1) 0% (0/5) 0% (0/10) 0% (0/47)


 package org.umlg.sqlg.test.datasource;
 
 import org.apache.commons.configuration2.Configuration;
 import org.apache.commons.configuration2.builder.fluent.Configurations;
 import org.apache.commons.configuration2.ex.ConfigurationException;
 import org.junit.*;
 import org.umlg.sqlg.sql.dialect.SqlDialect;
 import org.umlg.sqlg.structure.SqlgGraph;
 import org.umlg.sqlg.util.SqlgUtil;
 
 import java.net.URL;
 import java.sql.*;
 
 /**
  * @author <a href="https://github.com/pietermartin">Pieter Martin</a>
  * Date: 2018/12/20
  */
 public class TestDataSource {
 
     protected Configuration configuration;
 
     @BeforeClass
     public static void beforeClass() {
     }
 
     @SuppressWarnings("Duplicates")
     @Before
     public void before() throws ConfigurationException {
         URL sqlProperties = Thread.currentThread().getContextClassLoader().getResource("sqlg.properties");
         Configurations configs = new Configurations();
         configuration = configs.properties(sqlProperties);
         if (!this.configuration.containsKey("jdbc.url")) {
             throw new IllegalArgumentException(String.format("SqlGraph configuration requires that the %s be set", "jdbc.url"));
         }
         SqlgGraph sqlgGraph = SqlgGraph.open(configuration);
         SqlgUtil.dropDb(sqlgGraph);
         sqlgGraph.tx().commit();
         sqlgGraph.close();
 
         sqlgGraph = SqlgGraph.open(configuration);
         sqlgGraph.getSqlDialect().grantReadOnlyUserPrivilegesToSqlgSchemas(sqlgGraph);
         SqlDialect sqlDialect = sqlgGraph.getSqlDialect();
         Connection conn = sqlgGraph.tx().getConnection();
         SqlgUtil.dropDb(sqlDialect, conn);
         sqlgGraph.tx().commit();
         sqlgGraph.close();
     }
 
     @Test
     public void testQueryEmptyGraph() throws InterruptedException {
         for (int i = 0; i < 100; i++) {
             Assume.assumeTrue(this.configuration.getString("jdbc.url").contains("postgresql"));
             try {
                 Configurations readOnlyConfiguration = new Configurations();
                 configuration = readOnlyConfiguration.properties("sqlg.readonly.properties");
                 try (SqlgGraph ignored = SqlgGraph.open(configuration)) {
                     Assert.fail("user is readOnly, should not be able to start up on an empty graph.");
                 }
             } catch (RuntimeException e) {
                 Assert.assertEquals("org.postgresql.util.PSQLException", e.getCause().getClass().getName());
             } catch (ConfigurationException e) {
                 Assert.fail(e.getMessage());
             }
         }
         Thread.sleep(30_000);
         int count = countConnections();
         //7 is a tad arbitrary, not really getting it.
         //C3P0 has 3 helper threads, looks like they hang around after closing the datasource. going with 12 for good measure.
         //Setting the dataSource = null in C3P0DataSource.close(), looks like the count is 0 now.
         System.out.println(count);
         Assert.assertTrue(String.format("Expected count < 12, found %d",  count), count < 12);
     }
 
     private int countConnections() {
         //check no leaked connections to sqlgraphdb
         try {
             Class.forName("org.postgresql.Driver");
             Connection connection = DriverManager.getConnection(
                     this.configuration.getString("jdbc.url"),
                     this.configuration.getString("jdbc.username"),
                     this.configuration.getString("jdbc.password")
             );
             Statement statement = connection.createStatement();
             ResultSet rs = statement.executeQuery("select count(*) from pg_stat_activity where " +
                     "datname = 'sqlgraphdb' and " +
                     "application_name not like 'pgAdmin 4%' and " +
                     "application_name not like 'Citus Maintenance%' and " +
                     "application_name not like 'PostgreSQL JDBC Driver' and " +
                     "usename is not null");
             Assert.assertTrue(rs.next());
             //only count the jdbc connection for this command.
             int result = rs.getInt(1);
             connection.close();
             return result;
         } catch (ClassNotFoundException | SQLException e) {
             e.printStackTrace();
             return -1;
         }
     }
 }