Java tutorial
/* * Copyright 2013 Hewlett-Packard Development Company, L.P * * 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 com.hp.alm.ali.idea.rest; import com.hp.alm.ali.ServerVersion; import com.hp.alm.ali.idea.IntellijTest; import com.hp.alm.ali.rest.client.ResultInfo; import com.hp.alm.ali.rest.client.exception.AuthenticationFailureException; import com.intellij.notification.Notification; import com.intellij.notification.NotificationDisplayType; import com.intellij.notification.NotificationType; import com.intellij.notification.Notifications; import com.intellij.openapi.application.ApplicationManager; import com.intellij.util.messages.MessageBusConnection; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.mutable.MutableInt; import org.jetbrains.annotations.NotNull; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class TroubleShootServiceTest extends IntellijTest { private TroubleShootService troubleShootService; @Before public void preClean() { troubleShootService = ApplicationManager.getApplication().getComponent(TroubleShootService.class); troubleShootService._reset(); } public TroubleShootServiceTest() { super(ServerVersion.AGM); } @Test public void testRecording() throws IOException { File file = File.createTempFile("trouble", ""); ResultInfo resultInfo = ResultInfo.create(new ByteArrayOutputStream()); resultInfo.setLocation("location"); resultInfo.setHttpStatus(401); resultInfo.setReasonPhrase("failed1"); troubleShootService.loginFailure(1, new AuthenticationFailureException(resultInfo)); troubleShootService.request(getProject(), "GET", new MyInputData("<foo1/>"), "defects/{0}", "1"); MyResultInfo result = new MyResultInfo(); result.getOutputStream().write("foobar1".getBytes()); troubleShootService.response(1, 200, result); Assert.assertFalse(troubleShootService.isRunning()); troubleShootService.start(file); Assert.assertTrue(troubleShootService.isRunning()); resultInfo.setReasonPhrase("failed2"); troubleShootService.loginFailure(1, new AuthenticationFailureException(resultInfo)); troubleShootService.request(getProject(), "GET", new MyInputData("<foo2/>"), "defects/{0}", "2"); result = new MyResultInfo(); result.getHeaders().put("a", "b"); result.getOutputStream().write("foobar2".getBytes()); troubleShootService.response(1, 200, result); troubleShootService.stop(); Assert.assertFalse(troubleShootService.isRunning()); resultInfo.setReasonPhrase("failed3"); troubleShootService.loginFailure(1, new AuthenticationFailureException(resultInfo)); troubleShootService.request(getProject(), "GET", new MyInputData("<foo3/>"), "defects/{0}", "3"); result = new MyResultInfo(); result.getOutputStream().write("foobar3".getBytes()); troubleShootService.response(1, 200, result); String data = IOUtils.toString(new FileInputStream(file)); // not started Assert.assertFalse(data.contains("failed1")); Assert.assertFalse(data.contains(">>>>> GET defects/{0} [1]")); Assert.assertFalse(data.contains("foobar1")); // failure Assert.assertTrue(data.contains("<<<<< login failure: #1")); Assert.assertTrue(data.contains("<<<<< 401 failed2 [location: location]")); // request Assert.assertTrue(data.contains(">>>>> GET defects/{0} [2]")); // response Assert.assertTrue(data.contains(">>>>> data: <foo2/>")); Assert.assertTrue(data.contains("<<<<< status: 200")); Assert.assertTrue(data.contains("<<<<< headers: {a=b}")); Assert.assertTrue(data.contains("<<<<< data: foobar2")); // already stopped Assert.assertFalse(data.contains("failed3")); Assert.assertFalse(data.contains(">>>>> GET defects/{0} [3]")); Assert.assertFalse(data.contains("foobar3")); } @Test public void testNotification() throws IOException { File file = File.createTempFile("trouble", ""); troubleShootService.start(file); final MessageBusConnection connection = getProject().getMessageBus().connect(); final MutableInt times = new MutableInt(0); connection.subscribe(Notifications.TOPIC, new Notifications() { @Override public void notify(@NotNull Notification notification) { Assert.assertEquals("HP ALM Integration", notification.getGroupId()); Assert.assertEquals("Troubleshooting mode is on and all REST communication is being tracked.", notification.getTitle()); Assert.assertEquals(NotificationType.INFORMATION, notification.getType()); times.add(1); } @Override public void register(@NotNull String groupDisplayName, @NotNull NotificationDisplayType defaultDisplayType) { } @Override public void register(@NotNull String groupDisplayName, @NotNull NotificationDisplayType defaultDisplayType, boolean shouldLog) { } // needed for 13, adapter class not defined in 12.1.1 public void register(@NotNull String groupDisplayName, @NotNull NotificationDisplayType defaultDisplayType, boolean shouldLog, boolean shouldReadAloud) { } }); troubleShootService._setNotificationDelay(60000); for (int i = 0; i < 100; i++) { troubleShootService.request(getProject(), "GET", new MyInputData("<foo/>"), "defects/{0}", "0"); } testApplication.waitForBackgroundActivityToFinish(); // only 1 notification due to notification delay Assert.assertEquals(1, times.getValue()); troubleShootService._setNotificationDelay(0); for (int i = 0; i < 100; i++) { troubleShootService.request(getProject(), "GET", new MyInputData("<foo/>"), "defects/{0}", "0"); } testApplication.waitForBackgroundActivityToFinish(); // additional 10 notifications Assert.assertEquals(11, times.getValue()); connection.disconnect(); troubleShootService.stop(); } }