/* * 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 com.aliyun.odps.rest; import java.io.InputStream; import java.util.Map; import org.junit.Test; import com.aliyun.odps.OdpsException; import com.aliyun.odps.commons.transport.Response; public class RestMockTest extends RestClient { public static class MockResponse extends Response { public MockResponse() { this.status = 200; } } private long retryTimes = 0; private long sleepTime = 0; public RestMockTest() { super(null); super.setConnectTimeout(2); super.setReadTimeout(2); } @Override protected Response requestWithNoRetry(String resource, String method, Map<String, String> params, Map<String, String> headers, InputStream body, long bodyLen) throws OdpsException { if (retryTimes > 0) { if (sleepTime > 0) { try { Thread.sleep(sleepTime); } catch (InterruptedException e) { } } --retryTimes; throw new OdpsException("Failed in retry test."); } MockResponse resp = new MockResponse(); return resp; } @Test public void testRetry() throws OdpsException { retryTimes = 4; request("", "GET", null, null, null, 0); } @Test(expected = OdpsException.class) public void testRetryFail() throws OdpsException { retryTimes = 5; request("", "GET", null, null, null, 0); } @Test(expected = OdpsException.class) public void testRetryPut() throws OdpsException { retryTimes = 1; request("", "PUT", null, null, null, 0); } @Test(expected = RuntimeException.class) public void testRetryLogger() throws OdpsException { class TestLoggerClass extends RetryLogger { @Override public void onRetryLog(Throwable e, long retryCount, long retrySleepTime) { System.out.println(retryCount); System.out.println(retrySleepTime); throw new RuntimeException(e.getMessage(), e); } }; TestLoggerClass logger = new TestLoggerClass(); setRetryLogger(logger); retryTimes = 3; request("", "GET", null, null, null, 0); } @Test public void testTime() throws OdpsException { retryTimes = 1; sleepTime = (getConnectTimeout() + getReadTimeout()) * 1000; long startTime = System.currentTimeMillis(); request("", "GET", null, null, null, 0); long endTime = System.currentTimeMillis(); assert (endTime - startTime < sleepTime + 5000); } }