Java tutorial
package org.codehaus.mojo.delicious; /* * Copyright 2005 Ashley Williams. * * 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. */ import java.io.FileNotFoundException; import java.io.IOException; import java.util.Arrays; import junit.framework.TestCase; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.GetMethod; import org.codehaus.mojo.delicious.Bookmark; import org.codehaus.mojo.delicious.DeliciousConnection; import org.codehaus.mojo.delicious.DeliciousService; public class DeliciousServiceTest extends TestCase { private static class FailingConnection implements DeliciousConnection { private int failCount = 0; private final int max; /** * Create with the number of times the connection should fail before * it should start succeeding. * Value of -1 means it will always fail. * @param max */ public FailingConnection(int max) { this.max = max; } public int executeMethod(HttpClient client, GetMethod httpMethod) throws IOException, HttpException { failCount++; int code = (failCount <= max) || (max == -1) ? HttpStatus.SC_INTERNAL_SERVER_ERROR : HttpStatus.SC_OK; return code; } } /** * Adds bookmarks and ensures that the time taken is at least 1 seconds per bookmark. * @throws FileNotFoundException * @throws IOException * @throws InterruptedException */ public void testTimeCommand() throws FileNotFoundException, IOException, InterruptedException { DeliciousService service = new DeliciousService(new TestConnection()); Bookmark[] bookmarks = { new Bookmark(), new Bookmark(), new Bookmark() }; long startTime = getTime(); service.setUser("", ""); service.addBookmarks(Arrays.asList(bookmarks), Boolean.TRUE); long actualTime = getTime() - startTime; long expectedTime = bookmarks.length * 1000L; assertTrue("test was too quick, should have been (ms) at least " + expectedTime + " but was " + actualTime, actualTime > expectedTime); } /** * Inserts an http connector that only reports service-unavailable. * @throws InterruptedException * @throws IOException * */ public void testServiceUnavailable() throws IOException, InterruptedException { DeliciousService service = new DeliciousService(new DeliciousConnection() { public int executeMethod(HttpClient client, GetMethod httpMethod) throws IOException, HttpException { return HttpStatus.SC_SERVICE_UNAVAILABLE; } }); try { service.setUser("", ""); service.addBookmark(new Bookmark(), Boolean.TRUE); } catch (RuntimeException e) { assertEquals(service.getCode(), HttpStatus.SC_SERVICE_UNAVAILABLE); } } /** * Inserts an http connector that only reports internal server error. * @throws InterruptedException * @throws IOException * */ public void testInternalServerError() throws IOException, InterruptedException { DeliciousService service = new DeliciousService(new FailingConnection(-1)); try { service.setUser("", ""); service.addBookmark(new Bookmark(), Boolean.TRUE); } catch (RuntimeException e) { assertEquals(service.getCode(), HttpStatus.SC_INTERNAL_SERVER_ERROR); } } /** * Inserts an http connector that recovers from an internal server error. * @throws InterruptedException * @throws IOException * */ public void testInternalServerErrorRecover() throws IOException, InterruptedException { DeliciousService service = new DeliciousService(new FailingConnection(2)); service.setUser("", ""); service.addBookmark(new Bookmark(), Boolean.TRUE); assertTrue(true); } private long getTime() { return System.currentTimeMillis(); } }