/*
* 2012-3 Red Hat Inc. and/or its affiliates and other contributors.
*
* Licensed 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.overlord.rtgov.analytics.situation;
import static org.junit.Assert.*;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import org.junit.Test;
import org.overlord.rtgov.activity.model.ActivityTypeId;
import org.overlord.rtgov.activity.model.Context;
import org.overlord.rtgov.activity.model.Context.Type;
import org.overlord.rtgov.analytics.situation.Situation;
import org.overlord.rtgov.analytics.situation.Situation.Severity;
public class SituationTest {
public EntityManager getEntityManager() {
EntityManager ret=null;
try {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("overlord-rtgov-situations", null);
ret = emf.createEntityManager();
} catch (Exception e) {
e.printStackTrace();
fail("Failed to get entity manager: "+e);
}
return (ret);
}
@Test
public void testPersistSituation() {
EntityManager em=getEntityManager();
em.getTransaction().begin();
Situation s1=new Situation();
java.util.Set<ActivityTypeId> atid1=new java.util.LinkedHashSet<ActivityTypeId>();
atid1.add(new ActivityTypeId("1", 1));
s1.setActivityTypeIds(atid1);
java.util.Set<Context> ctxt1=new java.util.LinkedHashSet<Context>();
ctxt1.add(new Context(Type.Message, "M1"));
s1.setContext(ctxt1);
s1.getSituationProperties().put("Prop1", "Value1");
s1.setDescription("This is the first situation");
s1.setSeverity(Severity.Critical);
s1.setSubject("OrderService");
s1.setTimestamp(System.currentTimeMillis());
s1.setType("SLA violation");
em.persist(s1);
Situation s2=new Situation();
java.util.Set<ActivityTypeId> atid2=new java.util.LinkedHashSet<ActivityTypeId>();
atid2.add(new ActivityTypeId("2", 2));
s2.setActivityTypeIds(atid2);
java.util.Set<Context> ctxt2=new java.util.LinkedHashSet<Context>();
ctxt2.add(new Context(Type.Message, "M2"));
ctxt2.add(new Context(Type.Endpoint, "E2"));
s2.setContext(ctxt2);
s2.getSituationProperties().put("Prop2", "Value2");
s2.getSituationProperties().put("Prop3", "Value3");
s2.setDescription("This is the second situation");
s2.setSeverity(Severity.Critical);
s2.setSubject("InventoryService");
s2.setTimestamp(System.currentTimeMillis());
s2.setType("BLA violation");
em.persist(s2);
em.flush();
em.getTransaction().commit();
// Get all situations
Query query1=em.createQuery("SELECT sit from Situation sit");
java.util.List<?> results1=query1.getResultList();
if (results1.size() != 2) {
fail("Query 1 should have returned 2 situation: "+results1.size());
}
// Get situation for subject 'OrderService'
Query query2=em.createQuery("SELECT sit from Situation sit WHERE sit.subject = 'OrderService'");
java.util.List<?> results2=query2.getResultList();
if (results2.size() != 1) {
fail("Query 2 should have returned 1 situation: "+results2.size());
}
// Get situation for property 'Prop2' value 'Value2'
/* TODO: Fails due to "org.hibernate.QueryException: cannot dereference scalar collection element"
*
Query query3=em.createQuery("SELECT sit FROM Situation sit " +
"JOIN sit.properties as p where p.value = 'Value2'");
java.util.List<?> results3=query3.getResultList();
if (results3.size() != 1) {
fail("Query 3 should have returned 1 situation: "+results3.size());
}
*/
}
@Test
public void testCreateSubject1() {
if (Situation.createSubject() != null) {
fail("Should be null subject");
}
}
@Test
public void testCreateSubject2() {
if (!Situation.createSubject("hello").equals("hello")) {
fail("Incorrect one subject part");
}
}
@Test
public void testCreateSubject3() {
if (!Situation.createSubject("hello", "world").equals("hello"+Situation.SUBJECT_SEPARATOR_CHAR+"world")) {
fail("Incorrect two subject part");
}
}
@Test
public void testCreateSubject4() {
if (!Situation.createSubject("hello", null, "world").equals("hello"+Situation.SUBJECT_SEPARATOR_CHAR
+Situation.SUBJECT_SEPARATOR_CHAR+"world")) {
fail("Incorrect missing middle subject part");
}
}
@Test
public void testCreateSubject5() {
if (!Situation.createSubject("hello", null, "world", null).equals("hello"+Situation.SUBJECT_SEPARATOR_CHAR
+Situation.SUBJECT_SEPARATOR_CHAR+"world")) {
fail("Incorrect missing middle with missing end subject part");
}
}
}