/*
* Copyright 2013 JBoss Inc
*
* 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.ui.provider.situations;
import static org.junit.Assert.*;
import org.junit.Assert;
import org.junit.Test;
import org.overlord.rtgov.active.collection.ActiveList;
import org.overlord.rtgov.activity.model.ActivityType;
import org.overlord.rtgov.activity.model.ActivityTypeId;
import org.overlord.rtgov.activity.model.ActivityUnit;
import org.overlord.rtgov.activity.model.soa.RequestReceived;
import org.overlord.rtgov.activity.server.ActivityStore;
import org.overlord.rtgov.activity.store.mem.MemActivityStore;
import org.overlord.rtgov.analytics.situation.Situation;
import org.overlord.rtgov.analytics.situation.Situation.Severity;
import org.overlord.rtgov.analytics.situation.store.ResolutionState;
import org.overlord.rtgov.analytics.situation.store.SituationStore;
import org.overlord.rtgov.analytics.situation.store.SituationsQuery;
import org.overlord.rtgov.ui.client.model.MessageBean;
import org.overlord.rtgov.ui.client.model.SituationBean;
import org.overlord.rtgov.ui.client.model.SituationEventBean;
import org.overlord.rtgov.ui.client.model.SituationSummaryBean;
import org.overlord.rtgov.ui.client.model.SituationsFilterBean;
import org.overlord.rtgov.ui.provider.SituationEventListener;
public class RTGovSituationsProviderTest {
private static final String TEST_ID = "TestId";
private static final String TEST_AU = "TestAU";
private static final String TEST_CONTENT = "TestContent";
private static final String TEST_TYPE = "TestType";
private static final String TEST_SUBJECT = "TestSubject";
@Test
public void testNotifySituation() {
RTGovSituationsProvider provider=new RTGovSituationsProvider();
// ActiveList doesn't support 'add', so need to override with method that
// inserts into collection.
ActiveList situations=new ActiveList("test") {
public boolean add(Object obj) {
doInsert(null, obj);
return (true);
}
};
provider.setSituations(situations);
provider.init();
final java.util.List<SituationEventBean> events=new java.util.ArrayList<SituationEventBean>();
provider.addSituationEventListener(new SituationEventListener() {
@Override
public void onSituationEvent(SituationEventBean event) {
events.add(event);
}
});
Situation sit=new Situation();
sit.setSubject(TEST_SUBJECT);
situations.add(sit);
if (events.size() != 1) {
fail("Situation was not generated as an event");
}
SituationEventBean seb=events.get(0);
if (!seb.getSubject().equals(TEST_SUBJECT)) {
fail("Event subject incorrect: "+seb.getSubject());
}
}
@Test
public void testCreateQuery() {
SituationsFilterBean sfb=new SituationsFilterBean();
long fromTimestamp=12345678;
long toTimestamp=87654321;
sfb.setSeverity(Severity.Critical.toString().toLowerCase());
sfb.setTimestampFrom(new java.util.Date(fromTimestamp));
sfb.setTimestampTo(new java.util.Date(toTimestamp));
sfb.setType(TEST_TYPE);
SituationsQuery query=RTGovSituationsProvider.createQuery(sfb);
if (query == null) {
fail("No query returned");
}
if (query.getSeverity() != Severity.Critical) {
fail("Severity was incorrect: "+query.getSeverity());
}
if (query.getFromTimestamp() != fromTimestamp) {
fail("FromTimestamp was incorrect: "+query.getFromTimestamp());
}
if (query.getToTimestamp() != (toTimestamp)) {
fail("ToTimestamp was incorrect: "+query.getToTimestamp());
}
if (!query.getType().equals(TEST_TYPE)) {
fail("Type was incorrect: "+query.getType());
}
}
@Test
public void testSearch() {
RTGovSituationsProvider provider=new RTGovSituationsProvider();
SituationStore sits=new SituationStore() {
public Situation getSituation(String id) {
throw new AssertionError("Fail");
}
public java.util.List<Situation> getSituations(SituationsQuery query) {
java.util.List<Situation> ret=new java.util.ArrayList<Situation>();
if (query.getType() == null
&& query.getProperties().containsKey(Situation.RESUBMITTED_SITUATION_ID)) {
// Resubmission failure query so ignore
} else {
if (!query.getType().equals(TEST_TYPE)) {
throw new AssertionError("Unexpected query type: "+query.getType());
}
Situation s1=new Situation();
s1.setSubject(TEST_SUBJECT);
ret.add(s1);
}
return (ret);
}
public void assignSituation(String situationId, String userName) throws Exception {
throw new Exception("Fail");
}
public void unassignSituation(String situationId) throws Exception {
throw new Exception("Fail");
}
public void updateResolutionState(String situationId, ResolutionState resolutionState) throws Exception {
throw new Exception("Fail");
}
public void recordResubmitFailure(String situationId, String message, String userName) {
Assert.fail();
};
public void recordSuccessfulResubmit(String situationId, String userName) {
Assert.fail();
};
public int delete(SituationsQuery query) {
return 0;
};
public void delete(Situation sit) {
};
public void store(Situation situation) throws Exception {
};
};
provider.setSituationStore(sits);
provider.setSituations(new ActiveList("Test"));
provider.init();
SituationsFilterBean sfb=new SituationsFilterBean();
sfb.setType(TEST_TYPE);
try {
java.util.List<SituationSummaryBean> results=provider.search(sfb);
if (results == null) {
fail("No results");
}
if (results.size() != 1) {
fail("Expecting 1 result: "+results.size());
}
SituationSummaryBean ssb=results.get(0);
if (!ssb.getSubject().equals(TEST_SUBJECT)) {
fail("Subject was incorrect: "+ssb.getSubject());
}
} catch (Exception e) {
e.printStackTrace();
fail("Search failed: "+e.getMessage());
}
}
@Test
public void testGetMessage() {
RTGovSituationsProvider provider=new RTGovSituationsProvider();
ActivityStore acts=new MemActivityStore();
provider.setActivityStore(acts);
ActivityUnit au=new ActivityUnit();
au.setId(TEST_AU);
RequestReceived rr=new RequestReceived();
au.getActivityTypes().add(rr);
rr.setContent(TEST_CONTENT);
java.util.List<ActivityUnit> aulist=new java.util.ArrayList<ActivityUnit>();
aulist.add(au);
try {
acts.store(aulist);
} catch (Exception e) {
fail("Failed to store: "+e.getMessage());
}
provider.setSituations(new ActiveList("Test"));
provider.init();
Situation sit=new Situation();
sit.getActivityTypeIds().add(new ActivityTypeId(TEST_AU, 0));
try {
MessageBean mb=provider.getMessage(sit);
if (mb == null) {
fail("Message not returned");
}
if (mb.getContent() == null) {
fail("Message has no content");
}
if (!mb.getContent().equals(TEST_CONTENT)) {
fail("Content is incorrect: "+mb.getContent());
}
} catch (Exception e) {
e.printStackTrace();
fail("Get message failed: "+e.getMessage());
}
}
@Test
public void testGetSituation() {
RTGovSituationsProvider provider=new RTGovSituationsProvider();
SituationStore sits=new SituationStore() {
public Situation getSituation(String id) {
if (!id.equals(TEST_ID)) {
throw new AssertionError("Incorrect id");
}
Situation ret=new Situation();
ret.setSubject("Service|Operation");
ret.setId(id);
return (ret);
}
public java.util.List<Situation> getSituations(SituationsQuery query) {
return java.util.Collections.<Situation>emptyList();
}
public void assignSituation(String situationId, String userName) throws Exception {
throw new Exception("Fail");
}
public void unassignSituation(String situationId) throws Exception {
throw new Exception("Fail");
}
public void updateResolutionState(String situationId, ResolutionState resolutionState) throws Exception {
throw new Exception("Fail");
}
public void recordResubmitFailure(String situationId, String message, String userName) {
Assert.fail();
};
public void recordSuccessfulResubmit(String situationId, String userName) {
Assert.fail();
};
public int delete(SituationsQuery query) {
return 0;
}
public void delete(Situation sit) {
};
public void store(Situation situation) throws Exception {
};
};
provider.setSituationStore(sits);
provider.setSituations(new ActiveList("Test"));
provider.init();
try {
SituationBean sb=provider.getSituation(TEST_ID);
if (sb == null) {
fail("Result is null");
}
if (!sb.getSituationId().equals(TEST_ID)) {
fail("Situation id is incorrect: "+sb.getSituationId());
}
} catch (Exception e) {
e.printStackTrace();
fail("Get situation failed: "+e.getMessage());
}
}
@Test
public void testConfigureHeaders() {
ActivityType at=new RequestReceived();
at.getProperties().put(ActivityType.HEADER_FORMAT_PROPERTY_PREFIX+"header1", "dom");
at.getProperties().put("header1", "header1value");
at.getProperties().put(ActivityType.HEADER_FORMAT_PROPERTY_PREFIX+"header2", "text");
at.getProperties().put("header2", "header2value");
MessageBean mb=new MessageBean();
try {
RTGovSituationsProvider.configureHeaders(mb, at);
} catch (Exception e) {
fail("Failed to configure headers: "+e.getMessage());
}
if (mb.getHeaders().size() != 2) {
fail("Expecting 2 headers: "+mb.getHeaders().size());
}
String h1=mb.getHeaders().get("header1");
assertEquals("Header 1 not as expected", h1, "header1value");
if (mb.getHeaderFormats().size() != 2) {
fail("Expecting 2 header formats: "+mb.getHeaderFormats().size());
}
assertEquals("Header 2 format not as expected", mb.getHeaderFormats().get("header2"), "text");
}
}