/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.usergrid.chop.webapp.elasticsearch; import com.google.inject.Guice; import com.google.inject.Injector; import org.apache.commons.lang.time.DateUtils; import org.apache.usergrid.chop.api.Commit; import org.apache.usergrid.chop.api.Module; import org.apache.usergrid.chop.api.ProviderParams; import org.apache.usergrid.chop.stack.User; import org.apache.usergrid.chop.webapp.ChopUiModule; import org.apache.usergrid.chop.webapp.dao.*; import org.apache.usergrid.chop.webapp.dao.model.*; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.ClassRule; import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Date; import java.util.UUID; /** * This Suite populates an empty embedded elastic search with Dao related data, * for all Dao unit tests that are going to be conducted. * <p> * Almost all data prepared here is related to each other to a degree, according to the Dao relations, * by references to one another and common fields they have. So, if you want to change anything here, * or decide to add more data, first be sure you understand how relevant Daos relate to one another * and what existing data here relate to each other. * <p> * Or, if you were to change or add new functionality in Dao model, make sure you also make appropriate * modifications here and in DaoTest classes too, without reducing test coverage or losing sight of * the practical usage of Dao classes. */ @RunWith( Suite.class ) @Suite.SuiteClasses( { ModuleDaoTest.class, CommitDaoTest.class, NoteDaoTest.class, RunDaoTest.class, RunnerDaoTest.class, RunnerGroupTest.class, GroupedRunnersTest.class, RunResultDaoTest.class, UserDaoTest.class, ProviderParamsDaoTest.class } ) public class ESSuiteTest { private static Logger LOG = LoggerFactory.getLogger(ESSuiteTest.class); public static final String MODULE_GROUPID = "org.apache.usergrid.chop"; public static final String MODULE_ARTIFACT_1 = "chop-runner"; public static final String MODULE_ARTIFACT_2 = "chop-client"; public static final String MODULE_VERSION = "1.0-SNAPSHOT"; public static final String COMMIT_ID_1 = "cc471b502aca2791c3a068f93d15b79ff6b7b827"; public static final String COMMIT_ID_2 = "7072b85746a980bc5dd9923ccdc9e0ed8e4eb19e"; public static final String COMMIT_ID_3 = "e29074efad5e0e1c7c2b63128ff9284f9b47ceb3"; public static final String NOTE = "This is a note!"; public static final String IMAGE_ID = "ami-213213214"; public static final String TEST_NAME_1 = "org.apache.usergrid.chop.example.DigitalWatchTest"; public static final String TEST_NAME_2 = "org.apache.usergrid.chop.example.MechanicalWatchTest"; public static final String USER_1 = "testuser"; public static final String USER_2 = "user-2"; public static final String RUNNER_IPV4_1 = "54.227.39.111"; public static final String RUNNER_IPV4_2 = "23.20.162.112"; public static final String RUNNER_HOSTNAME_1 = "ec2-54-227-39-111.compute-1.amazonaws.com"; public static final String RUNNER_HOSTNAME_2 = "ec2-23-20-162-112.compute-1.amazonaws.com"; public static final String RUNNER_HOSTNAME_3 = "ec2-84-197-213-113.compute-1.amazonaws.com"; public static final String MODULE_ID_1 = BasicModule.createId( MODULE_GROUPID, MODULE_ARTIFACT_1, MODULE_VERSION ); public static final String MODULE_ID_2 = BasicModule.createId( MODULE_GROUPID, MODULE_ARTIFACT_2, MODULE_VERSION ); public static final String RUN_ID_1 = UUID.randomUUID().toString(); public static final String RUN_ID_2 = UUID.randomUUID().toString(); public static final String RUN_ID_3 = UUID.randomUUID().toString(); public static final String RUN_ID_4 = UUID.randomUUID().toString(); public static final String RUN_ID_5 = UUID.randomUUID().toString(); public static final String RUN_ID_6 = UUID.randomUUID().toString(); public static final String RUN_ID_7 = UUID.randomUUID().toString(); public static final String RUN_ID_8 = UUID.randomUUID().toString(); public static final RunnerGroup RUNNER_GROUP = new RunnerGroup( USER_1, COMMIT_ID_2, MODULE_ID_2 ); public static final Long RUN_DURATION = 100000L; public static final Long RUN_AVG_TIME_1 = 1505L; public static final int RESULT_RUN_COUNT = 18; @ClassRule public static ElasticSearchResource esClient = new ElasticSearchResource(); public static ModuleDao moduleDao; public static CommitDao commitDao; public static NoteDao noteDao; public static ProviderParamsDao ppDao; public static RunDao runDao; public static RunResultDao runResultDao; public static UserDao userDao; public static RunnerDao runnerDao; // Populate elastic search for all tests @BeforeClass public static void setUpData() throws Exception { LOG.info( "Setting up sample data for elasticsearch Dao tests..." ); Injector injector = Guice.createInjector( new ChopUiModule() ); IElasticSearchClient elasticSearchClient = injector.getInstance(IElasticSearchClient.class); elasticSearchClient.start(); setupUsers( injector ); setupModules( injector ); setupCommits( injector ); setupNotes( injector ); setupProviderParams( injector ); setupRunners( injector ); setupRuns( injector ); setupRunResults( injector ); LOG.info( "Sample data for dao tests are saved into elasticsearch" ); } private static void setupRuns( Injector injector ) throws Exception { Long startTime = new Date().getTime(); runDao = injector.getInstance( RunDao.class ); BasicRun run = new BasicRun( RUN_ID_1, COMMIT_ID_2, // commitId RUNNER_HOSTNAME_1, // runner 1, // runNumber TEST_NAME_1 // testName ); run.setActualTime( RUN_DURATION ); run.setStartTime( startTime ); run.setStopTime( startTime + RUN_DURATION ); run.setAvgTime( RUN_AVG_TIME_1 ); run.setChopType( "IterationChop" ); run.setIterations( 10 ); runDao.save( run ); startTime = new Date().getTime(); run = new BasicRun( RUN_ID_2, COMMIT_ID_2, // commitId RUNNER_HOSTNAME_1, // runner 2, // runNumber TEST_NAME_1 // testName ); run.setActualTime( RUN_DURATION ); run.setStartTime( startTime ); run.setStopTime( startTime + RUN_DURATION ); run.setAvgTime( 1284L ); run.setChopType( "IterationChop" ); run.setIterations( 20 ); runDao.save( run ); startTime = new Date().getTime(); run = new BasicRun( RUN_ID_3, COMMIT_ID_3, // commitId RUNNER_HOSTNAME_1, // runner 1, // runNumber TEST_NAME_2 // testName ); run.setActualTime( RUN_DURATION ); run.setStartTime( startTime ); run.setStopTime( startTime + RUN_DURATION ); run.setTotalTestsRun( 84 ); run.setChopType( "TimeChop" ); runDao.save( run ); startTime = new Date().getTime(); run = new BasicRun( RUN_ID_4, COMMIT_ID_2, // commitId RUNNER_HOSTNAME_3, // runner 1, // runNumber TEST_NAME_2 // testName ); run.setActualTime( RUN_DURATION ); run.setStartTime( startTime ); run.setStopTime( startTime + RUN_DURATION ); run.setTotalTestsRun( 60 ); run.setChopType( "TimeChop" ); run.setSaturate( true ); runDao.save( run ); startTime = new Date().getTime(); run = new BasicRun( RUN_ID_5, COMMIT_ID_1, // commitId RUNNER_HOSTNAME_3, // runner 2, // runNumber TEST_NAME_2 // testName ); run.setActualTime( RUN_DURATION ); run.setStartTime( startTime ); run.setStopTime( startTime + RUN_DURATION ); run.setTotalTestsRun( 72 ); run.setChopType( "TimeChop" ); run.setSaturate( true ); runDao.save( run ); startTime = new Date().getTime(); run = new BasicRun( RUN_ID_6, COMMIT_ID_1, // commitId RUNNER_HOSTNAME_1, // runner 2, // runNumber TEST_NAME_2 // testName ); run.setActualTime( RUN_DURATION ); run.setStartTime( startTime ); run.setStopTime( startTime + RUN_DURATION ); run.setTotalTestsRun( 122 ); run.setChopType( "TimeChop" ); run.setSaturate( false ); runDao.save( run ); startTime = new Date().getTime(); run = new BasicRun( RUN_ID_7, COMMIT_ID_1, // commitId RUNNER_HOSTNAME_2, // runner 2, // runNumber TEST_NAME_2 // testName ); run.setActualTime( RUN_DURATION ); run.setStartTime( startTime ); run.setStopTime( startTime + RUN_DURATION ); run.setTotalTestsRun( 122 ); run.setChopType( "TimeChop" ); run.setSaturate( false ); runDao.save( run ); startTime = new Date().getTime(); run = new BasicRun( RUN_ID_8, COMMIT_ID_1, // commitId RUNNER_HOSTNAME_3, // runner 1, // runNumber TEST_NAME_2 // testName ); run.setActualTime( RUN_DURATION ); run.setStartTime( startTime ); run.setStopTime( startTime + RUN_DURATION ); run.setTotalTestsRun( 60 ); run.setChopType( "TimeChop" ); run.setSaturate( true ); runDao.save( run ); } private static void setupProviderParams( Injector injector ) throws Exception { ppDao = injector.getInstance( ProviderParamsDao.class ); ProviderParams pp = new BasicProviderParams( USER_1, "m1.large", "1230d4353459da23ec21a259a", "ad911213ab21ef23ab4e0e", IMAGE_ID, "testKey1" ); ppDao.save( pp ); pp = new BasicProviderParams( "testuser2", "t1.micro", "1230d4353459da23ec21a259a", "ad911213ab21ef23ab4e0e", "ami-2143224", "testKey2" ); ppDao.save( pp ); } private static void setupNotes( Injector injector ) throws Exception { noteDao = injector.getInstance( NoteDao.class ); Note note = new Note( COMMIT_ID_1, 1, NOTE ); noteDao.save( note ); } private static void setupModules( Injector injector ) throws Exception { moduleDao = injector.getInstance( ModuleDao.class ); Module module = new BasicModule( MODULE_GROUPID, // groupId MODULE_ARTIFACT_1, // artifactId MODULE_VERSION, // version "https://stash.safehaus.org/scm/chop/main.git", // vcsRepoUrl MODULE_GROUPID // testPackageBase ); moduleDao.save( module ); module = new BasicModule( MODULE_GROUPID, // groupId MODULE_ARTIFACT_2, // artifactId MODULE_VERSION, // version "https://stash.safehaus.org/scm/chop/main.git", // vcsRepoUrl MODULE_GROUPID // testPackageBase ); moduleDao.save( module ); } private static void setupCommits( Injector injector ) throws Exception { // Commits shouldn't have the same createDate b/c of issues with sorting them Date now = new Date(); commitDao = injector.getInstance( CommitDao.class ); Commit commit = new BasicCommit( COMMIT_ID_1, // commitId MODULE_ID_1, // moduleId "742e2a76a6ba161f9efb87ce58a9187e", // warMD5 now, // createDate "/some/dummy/path" ); commitDao.save( commit ); commit = new BasicCommit( COMMIT_ID_2, // commitId MODULE_ID_2, // moduleId "395cfdfc3b77242a6f957d6d92da8958", // warMD5 DateUtils.addMinutes( now, 1 ), // createDate "/some/dummy/path" ); commitDao.save( commit ); commit = new BasicCommit( COMMIT_ID_3, // commitId MODULE_ID_2, // moduleId "b9860ffa5e39b6f7123ed8c72c4b7046", // warMD5 DateUtils.addMinutes( now, 2 ), // createDate "/some/dummy/path" ); commitDao.save( commit ); } private static void setupRunResults( Injector injector ) throws Exception { runResultDao = injector.getInstance( RunResultDao.class ); BasicRunResult runResult = new BasicRunResult( RUN_ID_1, 5, 1000, 0, 1 ); runResultDao.save( runResult ); runResult = new BasicRunResult( RUN_ID_1, 5, 1103, 0, 0 ); runResultDao.save( runResult ); runResult = new BasicRunResult( RUN_ID_2, 5, 1200, 1, 0 ); runResultDao.save( runResult ); runResult = new BasicRunResult( RUN_ID_3, 17, 15789, 2, 2 ); runResultDao.save( runResult ); runResult = new BasicRunResult( RUN_ID_4, 17, 15789, 2, 2 ); runResultDao.save( runResult ); runResult = new BasicRunResult( RUN_ID_4, 17, 15789, 2, 2 ); runResultDao.save( runResult ); runResult = new BasicRunResult( RUN_ID_4, 17, 15789, 2, 2 ); runResultDao.save( runResult ); runResult = new BasicRunResult( RUN_ID_5, RESULT_RUN_COUNT, 15729, 2, 2 ); runResultDao.save( runResult ); runResult = new BasicRunResult( RUN_ID_5, RESULT_RUN_COUNT, 13429, 0, 0 ); runResultDao.save( runResult ); runResult = new BasicRunResult( RUN_ID_5, RESULT_RUN_COUNT, 16421, 1, 0 ); runResultDao.save( runResult ); } private static void setupUsers( Injector injector ) throws Exception { userDao = injector.getInstance( UserDao.class ); User user = new User( USER_1, "password" ); userDao.save( user ); user = new User( USER_2, "sosecretsuchcryptowow" ); userDao.save( user ); } private static void setupRunners( Injector injector ) throws Exception { StringBuilder url = new StringBuilder(); runnerDao = injector.getInstance( RunnerDao.class ); BasicRunner runner = new BasicRunner( RUNNER_IPV4_1, // ipv4Address RUNNER_HOSTNAME_1, // hostname 24981, // serverPort url.append( "https://" ).append( RUNNER_HOSTNAME_1 ).append( ":" ).append( 24981 ).toString(), // url "/tmp" // tempDir ); runnerDao.save( runner, USER_1, COMMIT_ID_2, MODULE_ID_2 ); url = new StringBuilder(); runner = new BasicRunner( RUNNER_IPV4_2, // ipv4Address RUNNER_HOSTNAME_2, // hostname 8443, // serverPort url.append( "https://" ).append( RUNNER_HOSTNAME_2 ).append( ":" ).append( 8443 ).toString(), // url "/tmp" // tempDir ); runnerDao.save( runner, USER_1, COMMIT_ID_3, MODULE_ID_2 ); runner = new BasicRunner( "84.197.213.113", // ipv4Address RUNNER_HOSTNAME_3, // hostname 24981,// serverPort "https://ec2-84-197-213-113.compute-1.amazonaws.com:24981", // url "/tmp" // tempDir ); runnerDao.save( runner, USER_2, COMMIT_ID_2, MODULE_ID_2 ); } @AfterClass public static void tearDownData() { LOG.info( "ESSuiteTest teardown called" ); } }