Repository: incubator-eagle
Updated Branches:
  refs/heads/master 4d4d8c0ea -> 7976858ee


[EAGLE-801] Add unit test for eagle-core module

EAGLE-801 Add unit test for eagle-core module
- Add unit test for eagle-core module.
https://issues.apache.org/jira/browse/EAGLE-801

Author: chitin <chitin1...@gmail.com>
Author: Lingang Deng <chitin1...@gmail.com>

Closes #685 from chitin/EAGLE-801.


Project: http://git-wip-us.apache.org/repos/asf/incubator-eagle/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-eagle/commit/7976858e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-eagle/tree/7976858e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-eagle/diff/7976858e

Branch: refs/heads/master
Commit: 7976858ee068ca4a85d67f70f7bf574f3e75115f
Parents: 4d4d8c0
Author: chitin <chitin1...@gmail.com>
Authored: Mon Nov 28 16:46:03 2016 +0800
Committer: wujinhu <wujinhu...@126.com>
Committed: Mon Nov 28 16:46:03 2016 +0800

----------------------------------------------------------------------
 eagle-core/eagle-app/eagle-app-base/pom.xml     |  12 +
 .../app/service/ApplicationActionTest.java      |  58 +++++
 ...estApplicationHealthCheckEmailPublisher.java |  64 +++++
 .../TestApplicationHealthCheckServiceImpl.java  | 101 ++++++++
 .../TestApplicationManagementServiceImpl.java   | 181 +++++++++++++++
 .../org/apache/eagle/common/TestBase64.java     |  32 +++
 .../eagle/common/TestEagleExceptionWrapper.java |  32 +++
 .../eagle/common/TestSerializableUtils.java     |   1 -
 .../eagle/common/config/TestConfigParser.java   |  36 +++
 .../eagle-metadata/eagle-metadata-base/pom.xml  |   4 +
 .../eagle/metadata/model/TestConfiguration.java |  67 ++++++
 .../metadata/persistence/MetadataStoreTest.java |  28 +++
 .../TestMetadataStoreModuleFactory.java         |  33 +++
 .../TestApplicationEntityServiceMemoryImpl.java | 231 +++++++++++++++++++
 .../TestSiteEntityServiceMemoryImpl.java        |  97 ++++++++
 .../src/test/resources/application-test.conf    |  31 +++
 .../src/test/resources/application-test.xml     |  17 ++
 .../ApplicationEntityServiceJDBCImplTest.java   |  66 ++++++
 .../src/test/resources/application.conf         |   6 +-
 19 files changed, 1095 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/7976858e/eagle-core/eagle-app/eagle-app-base/pom.xml
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-app/eagle-app-base/pom.xml 
b/eagle-core/eagle-app/eagle-app-base/pom.xml
index 5e55239..a5e295e 100644
--- a/eagle-core/eagle-app/eagle-app-base/pom.xml
+++ b/eagle-core/eagle-app/eagle-app-base/pom.xml
@@ -113,5 +113,17 @@
                 </exclusion>
             </exclusions>
         </dependency>
+        <dependency>
+            <groupId>org.powermock</groupId>
+            <artifactId>powermock-module-junit4</artifactId>
+            <version>${powermock.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.powermock</groupId>
+            <artifactId>powermock-api-mockito</artifactId>
+            <version>${powermock.version}</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/7976858e/eagle-core/eagle-app/eagle-app-base/src/test/java/org/apache/eagle/app/service/ApplicationActionTest.java
----------------------------------------------------------------------
diff --git 
a/eagle-core/eagle-app/eagle-app-base/src/test/java/org/apache/eagle/app/service/ApplicationActionTest.java
 
b/eagle-core/eagle-app/eagle-app-base/src/test/java/org/apache/eagle/app/service/ApplicationActionTest.java
index d076bf7..76bb76a 100644
--- 
a/eagle-core/eagle-app/eagle-app-base/src/test/java/org/apache/eagle/app/service/ApplicationActionTest.java
+++ 
b/eagle-core/eagle-app/eagle-app-base/src/test/java/org/apache/eagle/app/service/ApplicationActionTest.java
@@ -18,10 +18,24 @@ package org.apache.eagle.app.service;
 
 import com.typesafe.config.Config;
 import com.typesafe.config.ConfigFactory;
+import org.apache.commons.collections.map.HashedMap;
+import org.apache.eagle.alert.engine.coordinator.StreamDefinition;
+import org.apache.eagle.alert.metadata.IMetadataDao;
+import org.apache.eagle.alert.metadata.impl.InMemMetadataDaoImpl;
+import org.apache.eagle.alert.metric.MetricConfigs;
+import org.apache.eagle.app.Application;
+import org.apache.eagle.app.environment.impl.StaticEnvironment;
+import org.apache.eagle.metadata.model.ApplicationDesc;
+import org.apache.eagle.metadata.model.ApplicationEntity;
+import org.apache.eagle.metadata.model.SiteEntity;
 import org.junit.Assert;
 import org.junit.Test;
+import static org.mockito.Mockito.*;
 
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 public class ApplicationActionTest {
     /**
@@ -45,4 +59,48 @@ public class ApplicationActionTest {
         Assert.assertEquals("appConfig.withFallback(envConfig): appConfig will 
override envConfig, envConfig is used as default config",
                 "APP",mergedConfig.getString("SCOPE"));
     }
+
+    @Test
+    public void testDoAction() {
+        Application application = mock(Application.class);
+        
when(application.getEnvironmentType()).thenReturn(StaticEnvironment.class);
+        SiteEntity siteEntity = new SiteEntity();
+        siteEntity.setSiteId("testsiteid");
+        siteEntity.setSiteName("testsitename");
+        siteEntity.setDescription("testdesc");
+        ApplicationDesc applicationDesc = new ApplicationDesc();
+        List<StreamDefinition> streamDefinitions = new ArrayList<>();
+        StreamDefinition sd = new StreamDefinition();
+        sd.setStreamId("streamId");
+        sd.setDescription("desc");
+        sd.setValidate(true);
+        sd.setTimeseries(false);
+        sd.setDataSource("ds1");
+        sd.setSiteId("siteId");
+        streamDefinitions.add(sd);
+        applicationDesc.setStreams(streamDefinitions);
+        applicationDesc.setType("type1");
+        ApplicationEntity metadata = new ApplicationEntity();
+        metadata.setAppId("appId");
+        metadata.setSite(siteEntity);
+        metadata.setDescriptor(applicationDesc);
+        metadata.setMode(ApplicationEntity.Mode.LOCAL);
+        metadata.setJarPath(applicationDesc.getJarPath());
+        Map<String, Object> configure = new HashedMap();
+        configure.put("a", "b");
+        metadata.setConfiguration(configure);
+        metadata.setContext(configure);
+        Config serverConfig = ConfigFactory.parseMap(new 
HashMap<String,String>(){{
+            put("dataSinkConfig.topic", "test_topic");
+            put("dataSinkConfig.brokerList", "sandbox.hortonworks.com:6667");
+            put(MetricConfigs.METRIC_PREFIX_CONF, "eagle.");
+        }});
+        IMetadataDao alertMetadataService = new 
InMemMetadataDaoImpl(serverConfig);
+        ApplicationAction applicationAction = new 
ApplicationAction(application, metadata, serverConfig, alertMetadataService);
+        applicationAction.doInstall();
+        applicationAction.doUninstall();
+        applicationAction.doStart();
+        applicationAction.doStop();
+        Assert.assertEquals(ApplicationEntity.Status.INITIALIZED, 
applicationAction.getStatus());
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/7976858e/eagle-core/eagle-app/eagle-app-base/src/test/java/org/apache/eagle/app/service/TestApplicationHealthCheckEmailPublisher.java
----------------------------------------------------------------------
diff --git 
a/eagle-core/eagle-app/eagle-app-base/src/test/java/org/apache/eagle/app/service/TestApplicationHealthCheckEmailPublisher.java
 
b/eagle-core/eagle-app/eagle-app-base/src/test/java/org/apache/eagle/app/service/TestApplicationHealthCheckEmailPublisher.java
new file mode 100644
index 0000000..23de188
--- /dev/null
+++ 
b/eagle-core/eagle-app/eagle-app-base/src/test/java/org/apache/eagle/app/service/TestApplicationHealthCheckEmailPublisher.java
@@ -0,0 +1,64 @@
+/*
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.eagle.app.service;
+
+import com.codahale.metrics.health.HealthCheck;
+import com.typesafe.config.Config;
+import com.typesafe.config.ConfigFactory;
+import org.apache.eagle.alert.engine.publisher.email.EagleMailClient;
+import org.apache.eagle.app.service.impl.ApplicationHealthCheckEmailPublisher;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+import static org.mockito.Mockito.*;
+
+import java.util.HashMap;
+
+/**
+ * @Since 11/24/16.
+ */
+@RunWith(PowerMockRunner.class)
+@PrepareForTest({ApplicationHealthCheckEmailPublisher.class})
+public class TestApplicationHealthCheckEmailPublisher {
+
+    @Test
+    public void testOnUnHealthApplication() throws Exception {
+        Config config = ConfigFactory.parseMap(new HashMap<String, String>() {
+            {
+                put("mail.smtp.recipients", "recipi...@eagle.com");
+                put("mail.smtp.sender", "sen...@eagle.com");
+                put("mail.smtp.subject", "test_subject");
+                put("mail.smtp.cc", "c...@eagle.com");
+                put("mail.smtp.template", "test_template");
+                put("mail.smtp.host", "localhost");
+                put("mail.smtp.port", "25");
+                put("host", "localhost");
+                put("port", "9090");
+            }
+        });
+        ApplicationHealthCheckEmailPublisher publisher = new 
ApplicationHealthCheckEmailPublisher(config);
+        EagleMailClient client = mock(EagleMailClient.class);
+        
PowerMockito.whenNew(EagleMailClient.class).withAnyArguments().thenReturn(client);
+        when(client.send(anyString(), anyString(), anyString(), anyString(), 
anyString(), anyObject(), anyObject())).thenReturn(false, true);
+        publisher.onUnHealthApplication("appId", new HashMap<String, 
HealthCheck.Result>(){{
+            put("appId", HealthCheck.Result.healthy());
+        }});
+        verify(client, times(2)).send(anyString(), anyString(), anyString(), 
anyString(), anyString(), anyObject(), anyObject());
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/7976858e/eagle-core/eagle-app/eagle-app-base/src/test/java/org/apache/eagle/app/service/TestApplicationHealthCheckServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/eagle-core/eagle-app/eagle-app-base/src/test/java/org/apache/eagle/app/service/TestApplicationHealthCheckServiceImpl.java
 
b/eagle-core/eagle-app/eagle-app-base/src/test/java/org/apache/eagle/app/service/TestApplicationHealthCheckServiceImpl.java
new file mode 100644
index 0000000..ebb4856
--- /dev/null
+++ 
b/eagle-core/eagle-app/eagle-app-base/src/test/java/org/apache/eagle/app/service/TestApplicationHealthCheckServiceImpl.java
@@ -0,0 +1,101 @@
+/*
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.eagle.app.service;
+
+import com.codahale.metrics.health.HealthCheckRegistry;
+import com.google.inject.Injector;
+import com.typesafe.config.Config;
+import com.typesafe.config.ConfigFactory;
+import io.dropwizard.setup.Environment;
+import org.apache.commons.collections.map.HashedMap;
+import org.apache.eagle.app.service.impl.ApplicationHealthCheckServiceImpl;
+import org.apache.eagle.app.service.impl.ApplicationProviderServiceImpl;
+import org.apache.eagle.metadata.model.ApplicationDesc;
+import org.apache.eagle.metadata.model.ApplicationEntity;
+import org.apache.eagle.metadata.model.SiteEntity;
+import org.apache.eagle.metadata.service.ApplicationEntityService;
+import org.junit.Before;
+import org.junit.Test;
+import org.powermock.reflect.Whitebox;
+
+import java.util.*;
+
+import static org.mockito.Mockito.*;
+
+/**
+ * @Since 11/24/16.
+ */
+public class TestApplicationHealthCheckServiceImpl {
+
+    ApplicationProviderService applicationProviderService;
+    ApplicationEntityService applicationEntityService;
+    Environment environment;
+    Config config;
+    ApplicationHealthCheckServiceImpl applicationHealthCheckService;
+
+    @Before
+    public void setUp() {
+        applicationEntityService = mock(ApplicationEntityService.class);
+        environment = mock(Environment.class);
+        config = ConfigFactory.parseMap(new HashMap<String, String>() {
+            {
+                put("application.healthCheck.initialDelay", "10000");
+                put("application.healthCheck.period", "10000");
+                put("application.healthCheck.publisher.publisherImpl", 
"org.apache.eagle.app.service.impl.ApplicationHealthCheckEmailPublisher");
+                put("application.healthCheck.publisher.dailySendHour", "11");
+                put("service.timezone", "UTC");
+                put("application.provider.loader", 
"org.apache.eagle.app.service.impl.ApplicationProviderSPILoader");
+            }
+        });
+        applicationProviderService = new 
ApplicationProviderServiceImpl(config);
+        HealthCheckRegistry healthCheckRegistry = new HealthCheckRegistry();
+        when(environment.healthChecks()).thenReturn(healthCheckRegistry);
+        
when(applicationEntityService.findAll()).thenReturn(generateCollections());
+        applicationHealthCheckService = new 
ApplicationHealthCheckServiceImpl(applicationProviderService, 
applicationEntityService, config);
+        Injector injector = mock(Injector.class);
+        Whitebox.setInternalState(applicationHealthCheckService, 
"currentInjector", injector);
+
+    }
+
+    @Test
+    public void testInit() throws NoSuchFieldException, IllegalAccessException 
{
+        applicationHealthCheckService.init(environment);
+        
applicationHealthCheckService.unregister((ApplicationEntity)((List)generateCollections()).get(0));
+    }
+
+    public Collection<ApplicationEntity> generateCollections() {
+        Collection<ApplicationEntity> entities = new ArrayList<>();
+        SiteEntity siteEntity = new SiteEntity();
+        siteEntity.setSiteId("testsiteid");
+        siteEntity.setSiteName("testsitename");
+        siteEntity.setDescription("testdesc");
+        ApplicationDesc applicationDesc = new ApplicationDesc();
+        applicationDesc.setType("TEST_APPLICATION");
+        ApplicationEntity applicationEntity = new ApplicationEntity();
+        applicationEntity.setSite(siteEntity);
+        applicationEntity.setDescriptor(applicationDesc);
+        applicationEntity.setMode(ApplicationEntity.Mode.LOCAL);
+        applicationEntity.setJarPath(applicationDesc.getJarPath());
+        Map<String, Object> configure = new HashedMap();
+        configure.put("a", "b");
+        applicationEntity.setConfiguration(configure);
+        applicationEntity.setContext(configure);
+        applicationEntity.setAppId("appId");
+        entities.add(applicationEntity);
+        return entities;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/7976858e/eagle-core/eagle-app/eagle-app-base/src/test/java/org/apache/eagle/app/service/TestApplicationManagementServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/eagle-core/eagle-app/eagle-app-base/src/test/java/org/apache/eagle/app/service/TestApplicationManagementServiceImpl.java
 
b/eagle-core/eagle-app/eagle-app-base/src/test/java/org/apache/eagle/app/service/TestApplicationManagementServiceImpl.java
new file mode 100644
index 0000000..c4b0227
--- /dev/null
+++ 
b/eagle-core/eagle-app/eagle-app-base/src/test/java/org/apache/eagle/app/service/TestApplicationManagementServiceImpl.java
@@ -0,0 +1,181 @@
+/*
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.eagle.app.service;
+
+import com.typesafe.config.Config;
+import com.typesafe.config.ConfigFactory;
+import junit.framework.Assert;
+import org.apache.commons.collections.map.HashedMap;
+import org.apache.eagle.alert.metadata.IMetadataDao;
+import org.apache.eagle.alert.metadata.impl.InMemMetadataDaoImpl;
+import org.apache.eagle.app.service.impl.ApplicationHealthCheckServiceImpl;
+import org.apache.eagle.app.service.impl.ApplicationManagementServiceImpl;
+import org.apache.eagle.app.service.impl.ApplicationProviderServiceImpl;
+import org.apache.eagle.metadata.exceptions.ApplicationWrongStatusException;
+import org.apache.eagle.metadata.exceptions.EntityNotFoundException;
+import org.apache.eagle.metadata.model.ApplicationDependency;
+import org.apache.eagle.metadata.model.ApplicationDesc;
+import org.apache.eagle.metadata.model.ApplicationEntity;
+import org.apache.eagle.metadata.model.SiteEntity;
+import org.apache.eagle.metadata.service.ApplicationEntityService;
+import org.apache.eagle.metadata.service.SiteEntityService;
+import 
org.apache.eagle.metadata.service.memory.ApplicationEntityServiceMemoryImpl;
+import 
org.apache.eagle.metadata.service.memory.SiteEntityEntityServiceMemoryImpl;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+import static org.mockito.Mockito.*;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @Since 11/25/16.
+ */
+@RunWith(PowerMockRunner.class)
+@PrepareForTest({ApplicationManagementServiceImpl.class})
+public class TestApplicationManagementServiceImpl {
+
+    SiteEntityService siteEntityService;
+    ApplicationProviderService applicationProviderService;
+    ApplicationEntityService applicationEntityService;
+    Config config;
+    IMetadataDao alertMetadataService;
+    ApplicationHealthCheckService applicationHealthCheckService;
+    ApplicationManagementService applicationManagementService;
+    ApplicationOperations.InstallOperation installOperation;
+    ApplicationOperations.UninstallOperation uninstallOperation;
+    ApplicationOperations.StartOperation startOperation;
+    ApplicationOperations.StopOperation stopOperation;
+    ApplicationOperations.CheckStatusOperation checkStatusOperation;
+    ApplicationEntity resultEntity;
+
+    @Before
+    public void setUp() throws EntityNotFoundException{
+        siteEntityService = mock(SiteEntityEntityServiceMemoryImpl.class);
+        applicationEntityService = 
mock(ApplicationEntityServiceMemoryImpl.class);
+        config = ConfigFactory.parseMap(new HashMap<String, String>() {
+            {
+                put("application.healthCheck.initialDelay", "10000");
+                put("application.healthCheck.period", "10000");
+                put("application.healthCheck.publisher.publisherImpl", 
"org.apache.eagle.app.service.impl.ApplicationHealthCheckEmailPublisher");
+                put("application.healthCheck.publisher.dailySendHour", "11");
+                put("service.timezone", "UTC");
+                put("application.provider.loader", 
"org.apache.eagle.app.service.impl.ApplicationProviderSPILoader");
+                put("dataSinkConfig.topic", "test_topic");
+                put("dataSinkConfig.brokerList", 
"sandbox.hortonworks.com:6667");
+                put("spoutNum", "4");
+                put("appId", "testAppId");
+            }
+        });
+        alertMetadataService = new InMemMetadataDaoImpl(config);
+        applicationProviderService = new 
ApplicationProviderServiceImpl(config);
+        applicationHealthCheckService = 
mock(ApplicationHealthCheckServiceImpl.class);
+        applicationManagementService = new 
ApplicationManagementServiceImpl(config, siteEntityService, 
applicationProviderService, applicationEntityService,
+            alertMetadataService, applicationHealthCheckService);
+        installOperation = new 
ApplicationOperations.InstallOperation("sandbox", "TEST_APPLICATION", 
ApplicationEntity.Mode.LOCAL, "/user");
+        startOperation = new ApplicationOperations.StartOperation(null, 
"TEST_APPLICATION_SANDBOX");
+        stopOperation = new ApplicationOperations.StopOperation(null, 
"TEST_APPLICATION_SANDBOX");
+        uninstallOperation = new 
ApplicationOperations.UninstallOperation(null, "TEST_APPLICATION_SANDBOX");
+        checkStatusOperation = new 
ApplicationOperations.CheckStatusOperation(null, "TEST_APPLICATION_SANDBOX");
+        
when(siteEntityService.getBySiteId(anyString())).thenReturn(generateSiteEntity());
+    }
+
+
+    @Test
+    public void testInstall() throws EntityNotFoundException {
+        
when(applicationEntityService.create(any(ApplicationEntity.class))).thenReturn(generateCommonEntity());
+        resultEntity = applicationManagementService.install(installOperation);
+        Assert.assertNotNull(resultEntity);
+    }
+
+    @Test
+    public void testUnInstall() throws ApplicationWrongStatusException {
+        when(applicationEntityService.getByUUIDOrAppId(anyString(), 
anyString())).thenReturn(generateCommonEntity());
+        resultEntity = 
applicationManagementService.uninstall(uninstallOperation);
+        verify(applicationEntityService, 
times(1)).delete(any(ApplicationEntity.class));
+    }
+
+    @Test
+    public void testStart() throws Exception {
+        when(applicationEntityService.getByUUIDOrAppId(anyString(), 
anyString())).thenReturn(generateCommonEntity());
+        ApplicationAction applicationAction = mock(ApplicationAction.class);
+        
PowerMockito.whenNew(ApplicationAction.class).withArguments(anyObject(), 
anyObject(), anyObject(), anyObject()).thenReturn(applicationAction);
+        resultEntity = applicationManagementService.start(startOperation);
+        verify(applicationAction, times(1)).doStart();
+        verify(applicationEntityService, 
times(1)).create(any(ApplicationEntity.class));
+    }
+
+    @Test
+    public void testStop() throws Exception {
+        when(applicationEntityService.getByUUIDOrAppId(anyString(), 
anyString())).thenReturn(generateRunningEntity());
+        ApplicationAction applicationAction = mock(ApplicationAction.class);
+        
PowerMockito.whenNew(ApplicationAction.class).withArguments(anyObject(), 
anyObject(), anyObject(), anyObject()).thenReturn(applicationAction);
+        resultEntity = applicationManagementService.stop(stopOperation);
+        verify(applicationAction, times(1)).doStop();
+        verify(applicationEntityService, 
times(1)).delete(any(ApplicationEntity.class));
+        verify(applicationEntityService, 
times(1)).create(any(ApplicationEntity.class));
+    }
+
+    @Test
+    public void testGetStatus() throws Exception {
+        when(applicationEntityService.getByUUIDOrAppId(anyString(), 
anyString())).thenReturn(generateRunningEntity());
+        ApplicationAction applicationAction = mock(ApplicationAction.class);
+        
PowerMockito.whenNew(ApplicationAction.class).withArguments(anyObject(), 
anyObject(), anyObject(), anyObject()).thenReturn(applicationAction);
+        
when(applicationAction.getStatus()).thenReturn(ApplicationEntity.Status.RUNNING);
+        ApplicationEntity.Status status = 
applicationManagementService.getStatus(checkStatusOperation);
+        Assert.assertEquals(ApplicationEntity.Status.RUNNING, status);
+    }
+
+    private SiteEntity generateSiteEntity() {
+        SiteEntity siteEntity = new SiteEntity();
+        siteEntity.setSiteId("sandbox");
+        siteEntity.setSiteName("sandboxname");
+        siteEntity.setDescription("sandboxdesc");
+        return siteEntity;
+    }
+
+    private ApplicationEntity generateCommonEntity() {
+        ApplicationDesc applicationDesc = new ApplicationDesc();
+        ApplicationDependency applicationDependency = new 
ApplicationDependency();
+        applicationDependency.setRequired(false);
+        applicationDesc.setType("TEST_APPLICATION");
+        applicationDesc.setDependencies(new 
ArrayList<ApplicationDependency>(){{
+            add(applicationDependency);
+        }});
+        ApplicationEntity applicationEntity = new ApplicationEntity();
+        applicationEntity.setSite(generateSiteEntity());
+        applicationEntity.setDescriptor(applicationDesc);
+        applicationEntity.setMode(ApplicationEntity.Mode.LOCAL);
+        applicationEntity.setJarPath(applicationDesc.getJarPath());
+        Map<String, Object> configure = new HashedMap();
+        configure.put("a", "b");
+        applicationEntity.setConfiguration(configure);
+        applicationEntity.setContext(configure);
+        applicationEntity.setAppId("testAppId");
+        return applicationEntity;
+    }
+
+    private ApplicationEntity generateRunningEntity() {
+        ApplicationEntity applicationEntity = generateCommonEntity();
+        applicationEntity.setStatus(ApplicationEntity.Status.RUNNING);
+        return applicationEntity;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/7976858e/eagle-core/eagle-common/src/test/java/org/apache/eagle/common/TestBase64.java
----------------------------------------------------------------------
diff --git 
a/eagle-core/eagle-common/src/test/java/org/apache/eagle/common/TestBase64.java 
b/eagle-core/eagle-common/src/test/java/org/apache/eagle/common/TestBase64.java
new file mode 100644
index 0000000..03ffeb7
--- /dev/null
+++ 
b/eagle-core/eagle-common/src/test/java/org/apache/eagle/common/TestBase64.java
@@ -0,0 +1,32 @@
+/*
+ * 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.eagle.common;
+
+import junit.framework.Assert;
+import org.junit.Test;
+
+/**
+ * @Since 11/22/16.
+ */
+public class TestBase64 {
+
+    @Test
+    public void testBase64() {
+        String salted = "eagle";
+        Assert.assertEquals(salted, Base64.decode(Base64.encode(salted)));
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/7976858e/eagle-core/eagle-common/src/test/java/org/apache/eagle/common/TestEagleExceptionWrapper.java
----------------------------------------------------------------------
diff --git 
a/eagle-core/eagle-common/src/test/java/org/apache/eagle/common/TestEagleExceptionWrapper.java
 
b/eagle-core/eagle-common/src/test/java/org/apache/eagle/common/TestEagleExceptionWrapper.java
new file mode 100644
index 0000000..1730d9e
--- /dev/null
+++ 
b/eagle-core/eagle-common/src/test/java/org/apache/eagle/common/TestEagleExceptionWrapper.java
@@ -0,0 +1,32 @@
+/*
+ * 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.eagle.common;
+
+import junit.framework.Assert;
+import org.junit.Test;
+
+/**
+ * @Since 11/22/16.
+ */
+public class TestEagleExceptionWrapper {
+
+    @Test
+    public void testWrap() {
+        Exception exception = new Exception();
+        
Assert.assertTrue(EagleExceptionWrapper.wrap(exception).startsWith("java.lang.Exception"));
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/7976858e/eagle-core/eagle-common/src/test/java/org/apache/eagle/common/TestSerializableUtils.java
----------------------------------------------------------------------
diff --git 
a/eagle-core/eagle-common/src/test/java/org/apache/eagle/common/TestSerializableUtils.java
 
b/eagle-core/eagle-common/src/test/java/org/apache/eagle/common/TestSerializableUtils.java
index 9767d9e..a0135e4 100644
--- 
a/eagle-core/eagle-common/src/test/java/org/apache/eagle/common/TestSerializableUtils.java
+++ 
b/eagle-core/eagle-common/src/test/java/org/apache/eagle/common/TestSerializableUtils.java
@@ -22,7 +22,6 @@ import org.junit.Test;
 
 import java.io.Serializable;
 
-@Ignore
 public class TestSerializableUtils {
     @Test
     public void testSerializeObject() {

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/7976858e/eagle-core/eagle-common/src/test/java/org/apache/eagle/common/config/TestConfigParser.java
----------------------------------------------------------------------
diff --git 
a/eagle-core/eagle-common/src/test/java/org/apache/eagle/common/config/TestConfigParser.java
 
b/eagle-core/eagle-common/src/test/java/org/apache/eagle/common/config/TestConfigParser.java
new file mode 100644
index 0000000..c5ef27f
--- /dev/null
+++ 
b/eagle-core/eagle-common/src/test/java/org/apache/eagle/common/config/TestConfigParser.java
@@ -0,0 +1,36 @@
+/*
+ * 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.eagle.common.config;
+
+import com.typesafe.config.Config;
+import junit.framework.Assert;
+import org.apache.commons.cli.ParseException;
+import org.junit.Test;
+
+/**
+ * @Since 11/22/16.
+ */
+public class TestConfigParser {
+
+    @Test
+    public void testLoadNullArgs() throws ParseException {
+        System.setProperty("config.resource", "application-test.conf");
+        ConfigOptionParser configOptionParser = new ConfigOptionParser();
+        Config config = configOptionParser.load(null);
+        Assert.assertEquals("UTC", config.getString("service.timezone"));
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/7976858e/eagle-core/eagle-metadata/eagle-metadata-base/pom.xml
----------------------------------------------------------------------
diff --git a/eagle-core/eagle-metadata/eagle-metadata-base/pom.xml 
b/eagle-core/eagle-metadata/eagle-metadata-base/pom.xml
index 8df0674..f58c34c 100644
--- a/eagle-core/eagle-metadata/eagle-metadata-base/pom.xml
+++ b/eagle-core/eagle-metadata/eagle-metadata-base/pom.xml
@@ -65,5 +65,9 @@
             <artifactId>eagle-entity-base</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-all</artifactId>
+        </dependency>
     </dependencies>
 </project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/7976858e/eagle-core/eagle-metadata/eagle-metadata-base/src/test/java/org/apache/eagle/metadata/model/TestConfiguration.java
----------------------------------------------------------------------
diff --git 
a/eagle-core/eagle-metadata/eagle-metadata-base/src/test/java/org/apache/eagle/metadata/model/TestConfiguration.java
 
b/eagle-core/eagle-metadata/eagle-metadata-base/src/test/java/org/apache/eagle/metadata/model/TestConfiguration.java
new file mode 100644
index 0000000..daa9116
--- /dev/null
+++ 
b/eagle-core/eagle-metadata/eagle-metadata-base/src/test/java/org/apache/eagle/metadata/model/TestConfiguration.java
@@ -0,0 +1,67 @@
+/*
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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.eagle.metadata.model;
+import org.junit.Assert;
+import org.junit.Test;
+
+import javax.xml.bind.JAXBException;
+import java.io.InputStream;
+
+/**
+ * @Since 11/23/16.
+ */
+public class TestConfiguration {
+
+    @Test
+    public void testFromStream() throws JAXBException {
+        InputStream inputStream = 
this.getClass().getResourceAsStream("/application-test.xml");
+        Configuration configuration = Configuration.fromStream(inputStream);
+        Assert.assertTrue(configuration.hasProperty("testkey1"));
+    }
+
+    @Test
+    public void testFromResource() throws JAXBException {
+        String resource = "application-test.xml";
+        Configuration configuration = Configuration.fromResource(resource);
+        Assert.assertEquals("testvalue1", 
configuration.getProperty("testkey1").getValue());
+        Assert.assertEquals("testkey1", 
configuration.getProperty("testkey1").getName());
+    }
+
+    @Test
+    public void testFromString() throws JAXBException {
+        String xmlContext = "<configuration>\n" +
+            "    <property>\n" +
+            "        <name>testkey1</name>\n" +
+            "        <value>testvalue1</value>\n" +
+            "        <description>testdesc1</description>\n" +
+            "    </property>\n" +
+            "    <property>\n" +
+            "        <name>testkey2</name>\n" +
+            "        <value>testvalue2</value>\n" +
+            "        <description>testdesc2</description>\n" +
+            "    </property>\n" +
+            "    <property>\n" +
+            "        <name>testkey3</name>\n" +
+            "        <value>testvalue3</value>\n" +
+            "        <description>testdesc3</description>\n" +
+            "    </property>\n" +
+            "</configuration>";
+        Configuration configuration = Configuration.fromString(xmlContext);
+        Assert.assertEquals("testvalue1", 
configuration.getProperty("testkey1").getValue());
+        Assert.assertEquals(3, configuration.size());
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/7976858e/eagle-core/eagle-metadata/eagle-metadata-base/src/test/java/org/apache/eagle/metadata/persistence/MetadataStoreTest.java
----------------------------------------------------------------------
diff --git 
a/eagle-core/eagle-metadata/eagle-metadata-base/src/test/java/org/apache/eagle/metadata/persistence/MetadataStoreTest.java
 
b/eagle-core/eagle-metadata/eagle-metadata-base/src/test/java/org/apache/eagle/metadata/persistence/MetadataStoreTest.java
new file mode 100644
index 0000000..6248249
--- /dev/null
+++ 
b/eagle-core/eagle-metadata/eagle-metadata-base/src/test/java/org/apache/eagle/metadata/persistence/MetadataStoreTest.java
@@ -0,0 +1,28 @@
+/*
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.eagle.metadata.persistence;
+
+/**
+ * @Since 11/23/16.
+ */
+public class MetadataStoreTest extends MetadataStore {
+
+    @Override
+    protected void configure() {
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/7976858e/eagle-core/eagle-metadata/eagle-metadata-base/src/test/java/org/apache/eagle/metadata/persistence/TestMetadataStoreModuleFactory.java
----------------------------------------------------------------------
diff --git 
a/eagle-core/eagle-metadata/eagle-metadata-base/src/test/java/org/apache/eagle/metadata/persistence/TestMetadataStoreModuleFactory.java
 
b/eagle-core/eagle-metadata/eagle-metadata-base/src/test/java/org/apache/eagle/metadata/persistence/TestMetadataStoreModuleFactory.java
new file mode 100644
index 0000000..0fd4e68
--- /dev/null
+++ 
b/eagle-core/eagle-metadata/eagle-metadata-base/src/test/java/org/apache/eagle/metadata/persistence/TestMetadataStoreModuleFactory.java
@@ -0,0 +1,33 @@
+/**
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.eagle.metadata.persistence;
+
+import junit.framework.Assert;
+import org.junit.Test;
+
+/**
+ * @Since 11/23/16.
+ */
+public class TestMetadataStoreModuleFactory {
+
+    @Test
+    public void testGetModuleWithConf() {
+        System.setProperty("config.resource", "application-test.conf");
+        MetadataStore instance = MetadataStoreModuleFactory.getModule();
+        
Assert.assertEquals("org.apache.eagle.metadata.persistence.MetadataStoreTest", 
instance.getName());
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/7976858e/eagle-core/eagle-metadata/eagle-metadata-base/src/test/java/org/apache/eagle/metadata/service/TestApplicationEntityServiceMemoryImpl.java
----------------------------------------------------------------------
diff --git 
a/eagle-core/eagle-metadata/eagle-metadata-base/src/test/java/org/apache/eagle/metadata/service/TestApplicationEntityServiceMemoryImpl.java
 
b/eagle-core/eagle-metadata/eagle-metadata-base/src/test/java/org/apache/eagle/metadata/service/TestApplicationEntityServiceMemoryImpl.java
new file mode 100644
index 0000000..b051681
--- /dev/null
+++ 
b/eagle-core/eagle-metadata/eagle-metadata-base/src/test/java/org/apache/eagle/metadata/service/TestApplicationEntityServiceMemoryImpl.java
@@ -0,0 +1,231 @@
+/**
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.eagle.metadata.service;
+
+import junit.framework.Assert;
+import org.apache.commons.collections.map.HashedMap;
+import org.apache.eagle.metadata.exceptions.EntityNotFoundException;
+import org.apache.eagle.metadata.model.ApplicationDesc;
+import org.apache.eagle.metadata.model.ApplicationEntity;
+import org.apache.eagle.metadata.model.SiteEntity;
+import 
org.apache.eagle.metadata.service.memory.ApplicationEntityServiceMemoryImpl;
+import org.junit.Test;
+import org.mockito.Mockito;
+import java.util.Collection;
+import java.util.Map;
+
+/**
+ * @Since 11/23/16.
+ */
+public class TestApplicationEntityServiceMemoryImpl {
+    ApplicationDescService applicationDescService = 
Mockito.mock(ApplicationDescService.class);
+    ApplicationEntityService applicationEntityService = new 
ApplicationEntityServiceMemoryImpl(applicationDescService);
+
+    @Test
+    public void testCreate() {
+        SiteEntity siteEntity = new SiteEntity();
+        siteEntity.setSiteId("testsiteid");
+        siteEntity.setSiteName("testsitename");
+        siteEntity.setDescription("testdesc");
+        ApplicationDesc applicationDesc = new ApplicationDesc();
+        applicationDesc.setType("type1");
+        ApplicationEntity applicationEntity = new ApplicationEntity();
+        applicationEntity.setSite(siteEntity);
+        applicationEntity.setDescriptor(applicationDesc);
+        applicationEntity.setMode(ApplicationEntity.Mode.LOCAL);
+        applicationEntity.setJarPath(applicationDesc.getJarPath());
+        Map<String, Object> configure = new HashedMap();
+        configure.put("a", "b");
+        applicationEntity.setConfiguration(configure);
+        applicationEntity.setContext(configure);
+        ApplicationEntity entity = 
applicationEntityService.create(applicationEntity);
+        System.out.println(entity.getUuid());
+        Assert.assertNotNull(entity);
+    }
+
+    @Test
+    public void testFindByUUID() throws EntityNotFoundException {
+        SiteEntity siteEntity = new SiteEntity();
+        siteEntity.setSiteId("testsiteid");
+        siteEntity.setSiteName("testsitename");
+        siteEntity.setDescription("testdesc");
+        ApplicationDesc applicationDesc = new ApplicationDesc();
+        applicationDesc.setType("type1");
+        ApplicationEntity applicationEntity = new ApplicationEntity();
+        applicationEntity.setSite(siteEntity);
+        applicationEntity.setDescriptor(applicationDesc);
+        applicationEntity.setMode(ApplicationEntity.Mode.LOCAL);
+        applicationEntity.setJarPath(applicationDesc.getJarPath());
+        Map<String, Object> configure = new HashedMap();
+        configure.put("a", "b");
+        applicationEntity.setConfiguration(configure);
+        applicationEntity.setContext(configure);
+        ApplicationEntity entity = 
applicationEntityService.create(applicationEntity);
+        String uuid = entity.getUuid();
+        ApplicationEntity resultEntity = 
applicationEntityService.getByUUID(uuid);
+        Assert.assertNotNull(resultEntity);
+    }
+
+    @Test
+    public void testFindBySiteId() throws EntityNotFoundException {
+        SiteEntity siteEntity = new SiteEntity();
+        siteEntity.setSiteId("testsiteid");
+        siteEntity.setSiteName("testsitename");
+        siteEntity.setDescription("testdesc");
+        ApplicationDesc applicationDesc = new ApplicationDesc();
+        applicationDesc.setType("type1");
+        ApplicationEntity applicationEntity = new ApplicationEntity();
+        applicationEntity.setSite(siteEntity);
+        applicationEntity.setDescriptor(applicationDesc);
+        applicationEntity.setMode(ApplicationEntity.Mode.LOCAL);
+        applicationEntity.setJarPath(applicationDesc.getJarPath());
+        Map<String, Object> configure = new HashedMap();
+        configure.put("a", "b");
+        applicationEntity.setConfiguration(configure);
+        applicationEntity.setContext(configure);
+        ApplicationEntity entity = 
applicationEntityService.create(applicationEntity);
+        Assert.assertNotNull(entity);
+        String siteId = entity.getSite().getSiteId();
+        Collection resultEntities = 
applicationEntityService.findBySiteId(siteId);
+        Assert.assertEquals(1, resultEntities.size());
+    }
+
+    @Test
+    public void testGetBySiteIdAndAppType() {
+        SiteEntity siteEntity = new SiteEntity();
+        siteEntity.setSiteId("testsiteid");
+        siteEntity.setSiteName("testsitename");
+        siteEntity.setDescription("testdesc");
+        ApplicationDesc applicationDesc = new ApplicationDesc();
+        applicationDesc.setType("type1");
+        ApplicationEntity applicationEntity = new ApplicationEntity();
+        applicationEntity.setSite(siteEntity);
+        applicationEntity.setDescriptor(applicationDesc);
+        applicationEntity.setMode(ApplicationEntity.Mode.LOCAL);
+        applicationEntity.setJarPath(applicationDesc.getJarPath());
+        Map<String, Object> configure = new HashedMap();
+        configure.put("a", "b");
+        applicationEntity.setConfiguration(configure);
+        applicationEntity.setContext(configure);
+        ApplicationEntity entity = 
applicationEntityService.create(applicationEntity);
+        Assert.assertNotNull(entity);
+        String siteId = entity.getSite().getSiteId();
+        String appType = entity.getDescriptor().getType();
+        ApplicationEntity resultEntity = 
applicationEntityService.getBySiteIdAndAppType(siteId, appType);
+        Assert.assertNotNull(resultEntity);
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testGetByUUIDOrAppIdWhenBothNull() {
+        applicationEntityService.getByUUIDOrAppId(null, null);
+    }
+
+    @Test
+    public void testGetByUUIDOrAppIdWhenNullAppId() {
+        SiteEntity siteEntity = new SiteEntity();
+        siteEntity.setSiteId("testsiteid");
+        siteEntity.setSiteName("testsitename");
+        siteEntity.setDescription("testdesc");
+        ApplicationDesc applicationDesc = new ApplicationDesc();
+        applicationDesc.setType("type1");
+        ApplicationEntity applicationEntity = new ApplicationEntity();
+        applicationEntity.setSite(siteEntity);
+        applicationEntity.setDescriptor(applicationDesc);
+        applicationEntity.setMode(ApplicationEntity.Mode.LOCAL);
+        applicationEntity.setJarPath(applicationDesc.getJarPath());
+        Map<String, Object> configure = new HashedMap();
+        configure.put("a", "b");
+        applicationEntity.setConfiguration(configure);
+        applicationEntity.setContext(configure);
+        ApplicationEntity entity = 
applicationEntityService.create(applicationEntity);
+        String uuid = entity.getUuid();
+        ApplicationEntity resultEntity = 
applicationEntityService.getByUUIDOrAppId(uuid, null);
+        Assert.assertNotNull(resultEntity);
+    }
+
+    @Test
+    public void testGetByUUIDOrAppIdNullUUID() {
+        SiteEntity siteEntity = new SiteEntity();
+        siteEntity.setSiteId("testsiteid");
+        siteEntity.setSiteName("testsitename");
+        siteEntity.setDescription("testdesc");
+        ApplicationDesc applicationDesc = new ApplicationDesc();
+        applicationDesc.setType("type1");
+        ApplicationEntity applicationEntity = new ApplicationEntity();
+        applicationEntity.setSite(siteEntity);
+        applicationEntity.setDescriptor(applicationDesc);
+        applicationEntity.setMode(ApplicationEntity.Mode.LOCAL);
+        applicationEntity.setJarPath(applicationDesc.getJarPath());
+        Map<String, Object> configure = new HashedMap();
+        configure.put("a", "b");
+        applicationEntity.setConfiguration(configure);
+        applicationEntity.setContext(configure);
+        ApplicationEntity entity = 
applicationEntityService.create(applicationEntity);
+        String appId = entity.getAppId();
+        ApplicationEntity resultEntity = 
applicationEntityService.getByUUIDOrAppId(null, appId);
+        Assert.assertNotNull(resultEntity);
+    }
+
+    @Test
+    public void testDelete() {
+        SiteEntity siteEntity = new SiteEntity();
+        siteEntity.setSiteId("testsiteid");
+        siteEntity.setSiteName("testsitename");
+        siteEntity.setDescription("testdesc");
+        ApplicationDesc applicationDesc = new ApplicationDesc();
+        applicationDesc.setType("type1");
+        ApplicationEntity applicationEntity = new ApplicationEntity();
+        applicationEntity.setSite(siteEntity);
+        applicationEntity.setDescriptor(applicationDesc);
+        applicationEntity.setMode(ApplicationEntity.Mode.LOCAL);
+        applicationEntity.setJarPath(applicationDesc.getJarPath());
+        Map<String, Object> configure = new HashedMap();
+        configure.put("a", "b");
+        applicationEntity.setConfiguration(configure);
+        applicationEntity.setContext(configure);
+        ApplicationEntity entity = 
applicationEntityService.create(applicationEntity);
+        ApplicationEntity resultEntity = 
applicationEntityService.delete(entity);
+        Assert.assertEquals(resultEntity, entity);
+    }
+
+    @Test
+    public void testUpdate() {
+        SiteEntity siteEntity = new SiteEntity();
+        siteEntity.setSiteId("testsiteid");
+        siteEntity.setSiteName("testsitename");
+        siteEntity.setDescription("testdesc");
+        ApplicationDesc applicationDesc = new ApplicationDesc();
+        applicationDesc.setType("type1");
+        ApplicationEntity applicationEntity = new ApplicationEntity();
+        applicationEntity.setSite(siteEntity);
+        applicationEntity.setDescriptor(applicationDesc);
+        applicationEntity.setMode(ApplicationEntity.Mode.LOCAL);
+        applicationEntity.setJarPath(applicationDesc.getJarPath());
+        Map<String, Object> configure = new HashedMap();
+        configure.put("a", "b");
+        applicationEntity.setConfiguration(configure);
+        applicationEntity.setContext(configure);
+        ApplicationEntity entity = 
applicationEntityService.create(applicationEntity);
+        ApplicationEntity entity2 = entity;
+        configure.put("c", "d");
+        entity2.setContext(configure);
+        ApplicationEntity resultEntity = 
applicationEntityService.update(entity2);
+        org.junit.Assert.assertEquals(2, resultEntity.getContext().size());
+        Collection collection = applicationEntityService.findAll();
+        Assert.assertEquals(1, collection.size());
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/7976858e/eagle-core/eagle-metadata/eagle-metadata-base/src/test/java/org/apache/eagle/metadata/service/TestSiteEntityServiceMemoryImpl.java
----------------------------------------------------------------------
diff --git 
a/eagle-core/eagle-metadata/eagle-metadata-base/src/test/java/org/apache/eagle/metadata/service/TestSiteEntityServiceMemoryImpl.java
 
b/eagle-core/eagle-metadata/eagle-metadata-base/src/test/java/org/apache/eagle/metadata/service/TestSiteEntityServiceMemoryImpl.java
new file mode 100644
index 0000000..645d18a
--- /dev/null
+++ 
b/eagle-core/eagle-metadata/eagle-metadata-base/src/test/java/org/apache/eagle/metadata/service/TestSiteEntityServiceMemoryImpl.java
@@ -0,0 +1,97 @@
+/**
+ * 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
+ * <p/>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p/>
+ * 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.eagle.metadata.service;
+
+import junit.framework.Assert;
+import org.apache.eagle.metadata.exceptions.EntityNotFoundException;
+import org.apache.eagle.metadata.model.SiteEntity;
+import 
org.apache.eagle.metadata.service.memory.SiteEntityEntityServiceMemoryImpl;
+import org.junit.Test;
+
+/**
+ * @Since 11/23/16.
+ */
+public class TestSiteEntityServiceMemoryImpl {
+
+    SiteEntityService siteEntityService = new 
SiteEntityEntityServiceMemoryImpl();
+
+    @Test
+    public void testCreate() {
+        SiteEntity siteEntity = new SiteEntity();
+        siteEntity.setSiteId("testsiteid");
+        siteEntity.setSiteName("testsitename");
+        siteEntity.setDescription("testdesc");
+        SiteEntity resultEntity = siteEntityService.create(siteEntity);
+        Assert.assertNotNull(resultEntity);
+    }
+
+    @Test
+    public void testGetBySiteIdAndUUID() throws EntityNotFoundException {
+        SiteEntity siteEntity = new SiteEntity();
+        siteEntity.setSiteId("testsiteid");
+        siteEntity.setSiteName("testsitename");
+        siteEntity.setDescription("testdesc");
+        SiteEntity entity = siteEntityService.create(siteEntity);
+        String uuid = entity.getUuid();
+        SiteEntity resultEntity = siteEntityService.getByUUID(uuid);
+        Assert.assertNotNull(resultEntity);
+        String siteId = entity.getSiteId();
+        resultEntity = siteEntityService.getBySiteId(siteId);
+        Assert.assertNotNull(resultEntity);
+
+    }
+
+    @Test(expected = EntityNotFoundException.class)
+    public void testGetBySiteIdFail() throws EntityNotFoundException {
+        siteEntityService.getBySiteId("fake uuid");
+    }
+
+    @Test
+    public void testDeleteBySiteId() throws EntityNotFoundException {
+        SiteEntity siteEntity = new SiteEntity();
+        siteEntity.setSiteId("testsiteid");
+        siteEntity.setSiteName("testsitename");
+        siteEntity.setDescription("testdesc");
+        SiteEntity entity = siteEntityService.create(siteEntity);
+        SiteEntity resultEntity = 
siteEntityService.deleteBySiteId(entity.getSiteId());
+        Assert.assertEquals(resultEntity, entity);
+    }
+
+    @Test
+    public void testDeleteBtUUID() throws EntityNotFoundException {
+        SiteEntity siteEntity = new SiteEntity();
+        siteEntity.setSiteId("testsiteid");
+        siteEntity.setSiteName("testsitename");
+        siteEntity.setDescription("testdesc");
+        SiteEntity entity = siteEntityService.create(siteEntity);
+        SiteEntity resultEntity = 
siteEntityService.deleteByUUID(entity.getUuid());
+        Assert.assertEquals(resultEntity, entity);
+    }
+
+    @Test
+    public void testUpdate() throws EntityNotFoundException {
+        SiteEntity siteEntity = new SiteEntity();
+        siteEntity.setSiteId("testsiteid");
+        siteEntity.setSiteName("testsitename");
+        siteEntity.setDescription("testdesc");
+        SiteEntity entity = siteEntityService.create(siteEntity);
+        SiteEntity entity2 = entity;
+        entity2.setSiteName("testsitename2");
+        SiteEntity resultEntity = siteEntityService.update(entity2);
+        Assert.assertEquals("testsitename2", resultEntity.getSiteName());
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/7976858e/eagle-core/eagle-metadata/eagle-metadata-base/src/test/resources/application-test.conf
----------------------------------------------------------------------
diff --git 
a/eagle-core/eagle-metadata/eagle-metadata-base/src/test/resources/application-test.conf
 
b/eagle-core/eagle-metadata/eagle-metadata-base/src/test/resources/application-test.conf
new file mode 100644
index 0000000..e5209ed
--- /dev/null
+++ 
b/eagle-core/eagle-metadata/eagle-metadata-base/src/test/resources/application-test.conf
@@ -0,0 +1,31 @@
+# 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.
+
+{
+  metadata {
+    store = org.apache.eagle.metadata.persistence.MetadataStoreTest
+    jdbc {
+      username = null
+      password = null
+      driverClassName = "org.h2.Driver"
+      connection = "jdbc:h2:mem:test"
+      connectionProperties = "encoding=UTF8;timeout=60"
+    }
+  }
+  dataSinkConfig {
+    topic = "test_topic"
+    brokerList = "server.eagle.apache.org:6667"
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/7976858e/eagle-core/eagle-metadata/eagle-metadata-base/src/test/resources/application-test.xml
----------------------------------------------------------------------
diff --git 
a/eagle-core/eagle-metadata/eagle-metadata-base/src/test/resources/application-test.xml
 
b/eagle-core/eagle-metadata/eagle-metadata-base/src/test/resources/application-test.xml
new file mode 100644
index 0000000..82e84ed
--- /dev/null
+++ 
b/eagle-core/eagle-metadata/eagle-metadata-base/src/test/resources/application-test.xml
@@ -0,0 +1,17 @@
+<configuration>
+    <property>
+        <name>testkey1</name>
+        <value>testvalue1</value>
+        <description>testdesc1</description>
+    </property>
+    <property>
+        <name>testkey2</name>
+        <value>testvalue2</value>
+        <description>testdesc2</description>
+    </property>
+    <property>
+        <name>testkey3</name>
+        <value>testvalue3</value>
+        <description>testdesc3</description>
+    </property>
+</configuration>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/7976858e/eagle-core/eagle-metadata/eagle-metadata-jdbc/src/test/java/org/apache/eagle/metadata/store/jdbc/ApplicationEntityServiceJDBCImplTest.java
----------------------------------------------------------------------
diff --git 
a/eagle-core/eagle-metadata/eagle-metadata-jdbc/src/test/java/org/apache/eagle/metadata/store/jdbc/ApplicationEntityServiceJDBCImplTest.java
 
b/eagle-core/eagle-metadata/eagle-metadata-jdbc/src/test/java/org/apache/eagle/metadata/store/jdbc/ApplicationEntityServiceJDBCImplTest.java
index 0f3cd7d..ebca88c 100644
--- 
a/eagle-core/eagle-metadata/eagle-metadata-jdbc/src/test/java/org/apache/eagle/metadata/store/jdbc/ApplicationEntityServiceJDBCImplTest.java
+++ 
b/eagle-core/eagle-metadata/eagle-metadata-jdbc/src/test/java/org/apache/eagle/metadata/store/jdbc/ApplicationEntityServiceJDBCImplTest.java
@@ -18,6 +18,7 @@
 package org.apache.eagle.metadata.store.jdbc;
 
 import org.apache.commons.collections.map.HashedMap;
+import org.apache.eagle.alert.engine.coordinator.StreamDefinition;
 import org.apache.eagle.app.service.ApplicationProviderService;
 import org.apache.eagle.metadata.exceptions.EntityNotFoundException;
 import org.apache.eagle.metadata.model.ApplicationDesc;
@@ -30,7 +31,9 @@ import org.junit.Test;
 
 import javax.inject.Inject;
 import java.sql.SQLException;
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 import java.util.Map;
 
 public class ApplicationEntityServiceJDBCImplTest extends JDBCMetadataTestBase 
{
@@ -160,4 +163,67 @@ public class ApplicationEntityServiceJDBCImplTest extends 
JDBCMetadataTestBase {
         Assert.assertEquals(0, results.size());
     }
 
+    @Test
+    public void testUpdateApplicationEntity() {
+        SiteEntity siteEntity = new SiteEntity();
+        siteEntity.setSiteId("testsiteid");
+        siteEntity.setSiteName("testsitename");
+        siteEntity.setDescription("testdesc");
+        siteEntityService.create(siteEntity);
+        ApplicationDesc applicationDesc = 
applicationProviderService.getApplicationDescByType("TEST_APP");
+        ApplicationEntity applicationEntity = new ApplicationEntity();
+        applicationEntity.setSite(siteEntity);
+        applicationEntity.setDescriptor(applicationDesc);
+        applicationEntity.setMode(ApplicationEntity.Mode.LOCAL);
+        applicationEntity.setJarPath(applicationDesc.getJarPath());
+        Map<String, Object> configure = new HashedMap();
+        configure.put("a", "b");
+        applicationEntity.setConfiguration(configure);
+        applicationEntity.setContext(configure);
+        applicationEntityService.create(applicationEntity);
+        ApplicationEntity applicationEntity2 = applicationEntity;
+        configure.put("c", "d");
+        applicationEntity2.setContext(configure);
+        Collection<ApplicationEntity> results = 
applicationEntityService.findAll();
+        Assert.assertEquals(1, results.size());
+        applicationEntity = 
applicationEntityService.update(applicationEntity2);
+        Assert.assertEquals(2, applicationEntity.getContext().size());
+        results = applicationEntityService.findAll();
+        Assert.assertEquals(1, results.size());
+    }
+
+    @Test
+    public void testGetByUUID() throws EntityNotFoundException {
+        SiteEntity siteEntity = new SiteEntity();
+        siteEntity.setSiteId("testsiteid");
+        siteEntity.setSiteName("testsitename");
+        siteEntity.setDescription("testdesc");
+        siteEntityService.create(siteEntity);
+        ApplicationDesc applicationDesc = 
applicationProviderService.getApplicationDescByType("TEST_APP");
+        List<StreamDefinition> streamDefinitions = new ArrayList<>();
+        StreamDefinition sd = new StreamDefinition();
+        sd.setStreamId("streamId");
+        sd.setDescription("desc");
+        sd.setValidate(true);
+        sd.setTimeseries(false);
+        sd.setDataSource("ds1");
+        sd.setSiteId("siteId");
+        streamDefinitions.add(sd);
+        applicationDesc.setStreams(streamDefinitions);
+
+        ApplicationEntity applicationEntity = new ApplicationEntity();
+        applicationEntity.setSite(siteEntity);
+        applicationEntity.setDescriptor(applicationDesc);
+        applicationEntity.setMode(ApplicationEntity.Mode.LOCAL);
+        applicationEntity.setJarPath(applicationDesc.getJarPath());
+        Map<String, Object> configure = new HashedMap();
+        configure.put("a", "b");
+        applicationEntity.setConfiguration(configure);
+        applicationEntity.setContext(configure);
+        applicationEntityService.create(applicationEntity);
+        String appuuid = applicationEntity.getUuid();
+
+        ApplicationEntity applicationEntityFromDB = 
applicationEntityService.getByUUID(appuuid);
+        Assert.assertTrue(applicationEntityFromDB != null);
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-eagle/blob/7976858e/eagle-core/eagle-metadata/eagle-metadata-jdbc/src/test/resources/application.conf
----------------------------------------------------------------------
diff --git 
a/eagle-core/eagle-metadata/eagle-metadata-jdbc/src/test/resources/application.conf
 
b/eagle-core/eagle-metadata/eagle-metadata-jdbc/src/test/resources/application.conf
index a834c34..f4a0038 100644
--- 
a/eagle-core/eagle-metadata/eagle-metadata-jdbc/src/test/resources/application.conf
+++ 
b/eagle-core/eagle-metadata/eagle-metadata-jdbc/src/test/resources/application.conf
@@ -24,4 +24,8 @@
       connectionProperties = "encoding=UTF8;timeout=60"
     }
   }
-}
\ No newline at end of file
+  dataSinkConfig {
+    topic = "test_topic"
+    brokerList = "server.eagle.apache.org:6667"
+  }
+}

Reply via email to