Issue 113: signature logger

git-svn-id: http://jclouds.googlecode.com/svn/trunk@2006 3d8758e0-26b5-11de-8745-db77d3ebf521
This commit is contained in:
adrian.f.cole 2009-10-30 16:19:35 +00:00
parent 903254a6f9
commit 5b95c35ca7
16 changed files with 265 additions and 125 deletions

View File

@ -34,12 +34,14 @@ import javax.inject.Provider;
import javax.inject.Singleton;
import javax.ws.rs.core.HttpHeaders;
import org.apache.commons.io.IOUtils;
import org.jclouds.atmosonline.saas.reference.AtmosStorageConstants;
import org.jclouds.atmosonline.saas.reference.AtmosStorageHeaders;
import org.jclouds.http.HttpException;
import org.jclouds.http.HttpRequest;
import org.jclouds.http.HttpRequestFilter;
import org.jclouds.http.HttpUtils;
import org.jclouds.http.internal.SignatureWire;
import org.jclouds.util.TimeStamp;
import com.google.common.annotations.VisibleForTesting;
@ -54,14 +56,17 @@ import com.google.common.annotations.VisibleForTesting;
@Singleton
public class SignRequest implements HttpRequestFilter {
private final SignatureWire signatureWire;
private final String uid;
private final byte[] key;
private final Provider<String> timeStampProvider;
@Inject
public SignRequest(@Named(AtmosStorageConstants.PROPERTY_EMCSAAS_UID) String uid,
public SignRequest(SignatureWire signatureWire,
@Named(AtmosStorageConstants.PROPERTY_EMCSAAS_UID) String uid,
@Named(AtmosStorageConstants.PROPERTY_EMCSAAS_KEY) String encodedKey,
@TimeStamp Provider<String> timeStampProvider) {
this.signatureWire = signatureWire;
this.uid = uid;
this.key = HttpUtils.fromBase64String(encodedKey);
this.timeStampProvider = timeStampProvider;
@ -80,12 +85,16 @@ public class SignRequest implements HttpRequestFilter {
appendHttpHeaders(request, buffer);
appendCanonicalizedResource(request, buffer);
appendCanonicalizedHeaders(request, buffer);
if (signatureWire.enabled())
signatureWire.output(buffer.toString());
return buffer.toString();
}
private void calculateAndReplaceAuthHeader(HttpRequest request, String toSign)
throws HttpException {
String signature = signString(toSign);
if (signatureWire.enabled())
signatureWire.input(IOUtils.toInputStream(signature));
request.getHeaders().replaceValues(AtmosStorageHeaders.SIGNATURE,
Collections.singletonList(signature));
}

View File

@ -1,37 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
<!--
Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
Copyright (C) 2009 Cloud Conscious, LLC.
<info@cloudconscious.com>
====================================================================
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
====================================================================
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.
====================================================================
-->
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.
====================================================================
-->
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<!--
For more configuration infromation and examples see the Apache Log4j
website: http://logging.apache.org/log4j/
-->
<!--
For more configuration infromation and examples see the Apache
Log4j website: http://logging.apache.org/log4j/
-->
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"
debug="false">
debug="false">
<!-- A time/date based rolling appender -->
<appender name="WIREFILE" class="org.apache.log4j.DailyRollingFileAppender">
@ -48,52 +46,52 @@
<param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n" />
<!--
The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n
<param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x)
%m%n"/>
The full pattern: Date MS Priority [Category]
(Thread:NDC) Message\n <param name="ConversionPattern"
value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
-->
</layout>
</appender>
<!-- A time/date based rolling appender -->
<appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="target/test-data/jclouds.log" />
<param name="Append" value="true" />
<!-- A time/date based rolling appender -->
<appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="target/test-data/jclouds.log" />
<param name="Append" value="true" />
<!-- Rollover at midnight each day -->
<param name="DatePattern" value="'.'yyyy-MM-dd" />
<!-- Rollover at midnight each day -->
<param name="DatePattern" value="'.'yyyy-MM-dd" />
<param name="Threshold" value="TRACE" />
<param name="Threshold" value="TRACE" />
<layout class="org.apache.log4j.PatternLayout">
<!-- The default pattern: Date Priority [Category] Message\n -->
<param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n" />
<layout class="org.apache.log4j.PatternLayout">
<!-- The default pattern: Date Priority [Category] Message\n -->
<param name="ConversionPattern" value="%d %-5p [%c] (%t) %m%n" />
<!--
The full pattern: Date MS Priority [Category] (Thread:NDC) Message\n
<param name="ConversionPattern" value="%d %-5r %-5p [%c] (%t:%x)
%m%n"/>
-->
</layout>
</appender>
<appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
<appender-ref ref="FILE" />
</appender>
<!--
The full pattern: Date MS Priority [Category]
(Thread:NDC) Message\n <param name="ConversionPattern"
value="%d %-5r %-5p [%c] (%t:%x) %m%n"/>
-->
</layout>
</appender>
<appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
<appender-ref ref="FILE" />
</appender>
<appender name="ASYNCWIRE" class="org.apache.log4j.AsyncAppender">
<appender-ref ref="WIREFILE" />
</appender>
<!-- ================ -->
<!-- Limit categories -->
<!-- ================ -->
</appender>
<category name="org.jclouds">
<priority value="DEBUG" />
<!-- ================ -->
<!-- Limit categories -->
<!-- ================ -->
<category name="org.jclouds">
<priority value="DEBUG" />
<appender-ref ref="ASYNC" />
</category>
</category>
<category name="jclouds.http.headers">
<priority value="DEBUG" />
<appender-ref ref="ASYNCWIRE" />
@ -104,12 +102,18 @@
<appender-ref ref="ASYNCWIRE" />
</category>
<!-- ======================= -->
<!-- Setup the Root category -->
<!-- ======================= -->
<category name="jclouds.signature.wire">
<priority value="DEBUG" />
<appender-ref ref="ASYNCWIRE" />
</category>
<root>
<priority value="WARN" />
</root>
<!-- ======================= -->
<!-- Setup the Root category -->
<!-- ======================= -->
<root>
<priority value="WARN" />
</root>
</log4j:configuration>

View File

@ -36,11 +36,13 @@ import javax.inject.Provider;
import javax.inject.Singleton;
import javax.ws.rs.core.HttpHeaders;
import org.apache.commons.io.IOUtils;
import org.jclouds.aws.s3.reference.S3Constants;
import org.jclouds.http.HttpException;
import org.jclouds.http.HttpRequest;
import org.jclouds.http.HttpRequestFilter;
import org.jclouds.http.HttpUtils;
import org.jclouds.http.internal.SignatureWire;
import org.jclouds.util.TimeStamp;
import com.google.common.annotations.VisibleForTesting;
@ -57,14 +59,16 @@ public class RequestAuthorizeSignature implements HttpRequestFilter {
private final String[] firstHeadersToSign = new String[] { "Content-MD5",
HttpHeaders.CONTENT_TYPE, HttpHeaders.DATE };
private final SignatureWire signatureWire;
private final String accessKey;
private final String secretKey;
private final Provider<String> timeStampProvider;
@Inject
public RequestAuthorizeSignature(@Named(S3Constants.PROPERTY_AWS_ACCESSKEYID) String accessKey,
public RequestAuthorizeSignature(SignatureWire signatureWire, @Named(S3Constants.PROPERTY_AWS_ACCESSKEYID) String accessKey,
@Named(S3Constants.PROPERTY_AWS_SECRETACCESSKEY) String secretKey,
@TimeStamp Provider<String> timeStampProvider) {
this.signatureWire = signatureWire;
this.accessKey = accessKey;
this.secretKey = secretKey;
this.timeStampProvider = timeStampProvider;
@ -84,12 +88,16 @@ public class RequestAuthorizeSignature implements HttpRequestFilter {
appendAmzHeaders(request, buffer);
appendBucketName(request, buffer);
appendUriPath(request, buffer);
if(signatureWire.enabled())
signatureWire.output(buffer.toString());
return buffer.toString();
}
private void calculateAndReplaceAuthHeader(HttpRequest request, String toSign)
throws HttpException {
String signature = signString(toSign);
if (signatureWire.enabled())
signatureWire.input(IOUtils.toInputStream(signature));
request.getHeaders().replaceValues(HttpHeaders.AUTHORIZATION,
Collections.singletonList("AWS " + accessKey + ":" + signature));
}

View File

@ -34,11 +34,13 @@ import javax.inject.Provider;
import javax.inject.Singleton;
import javax.ws.rs.core.HttpHeaders;
import org.apache.commons.io.IOUtils;
import org.jclouds.azure.storage.reference.AzureStorageConstants;
import org.jclouds.http.HttpException;
import org.jclouds.http.HttpRequest;
import org.jclouds.http.HttpRequestFilter;
import org.jclouds.http.HttpUtils;
import org.jclouds.http.internal.SignatureWire;
import org.jclouds.util.TimeStamp;
import com.google.common.annotations.VisibleForTesting;
@ -55,15 +57,17 @@ public class SharedKeyAuthentication implements HttpRequestFilter {
private final String[] firstHeadersToSign = new String[] { "Content-MD5",
HttpHeaders.CONTENT_TYPE, HttpHeaders.DATE };
private final SignatureWire signatureWire;
private final String account;
private final byte[] key;
private final Provider<String> timeStampProvider;
@Inject
public SharedKeyAuthentication(
public SharedKeyAuthentication(SignatureWire signatureWire,
@Named(AzureStorageConstants.PROPERTY_AZURESTORAGE_ACCOUNT) String account,
@Named(AzureStorageConstants.PROPERTY_AZURESTORAGE_KEY) String encodedKey,
@TimeStamp Provider<String> timeStampProvider) {
this.signatureWire = signatureWire;
this.account = account;
this.key = HttpUtils.fromBase64String(encodedKey);
this.timeStampProvider = timeStampProvider;
@ -82,12 +86,16 @@ public class SharedKeyAuthentication implements HttpRequestFilter {
appendHttpHeaders(request, buffer);
appendCanonicalizedHeaders(request, buffer);
appendCanonicalizedResource(request, buffer);
if (signatureWire.enabled())
signatureWire.output(buffer.toString());
return buffer.toString();
}
private void calculateAndReplaceAuthHeader(HttpRequest request, String toSign)
throws HttpException {
String signature = signString(toSign);
if (signatureWire.enabled())
signatureWire.input(IOUtils.toInputStream(signature));
request.getHeaders().replaceValues(HttpHeaders.AUTHORIZATION,
Collections.singletonList("SharedKey " + account + ":" + signature));
}

View File

@ -33,6 +33,7 @@ public interface HttpConstants {
public static final String PROPERTY_HTTP_MAX_REDIRECTS = "jclouds.http.max-redirects";
public static final String HTTP_HEADERS_LOGGER = "jclouds.http.headers";
public static final String HTTP_WIRE_LOGGER = "jclouds.http.wire";
public static final String SIGNATURE_WIRE_LOGGER = "jclouds.signature.wire";
/**
* longest time a single request can take before throwing an exception.

View File

@ -54,10 +54,10 @@ public abstract class BaseHttpCommandExecutorService<Q> implements HttpCommandEx
@Named(HttpConstants.HTTP_HEADERS_LOGGER)
protected Logger headerLog = Logger.NULL;
private final Wire wire;
private final HttpWire wire;
protected BaseHttpCommandExecutorService(ExecutorService executorService,
DelegatingRetryHandler retryHandler, DelegatingErrorHandler errorHandler, Wire wire) {
DelegatingRetryHandler retryHandler, DelegatingErrorHandler errorHandler, HttpWire wire) {
this.retryHandler = retryHandler;
this.errorHandler = errorHandler;
this.executorService = executorService;

View File

@ -0,0 +1,57 @@
/**
*
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* 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 org.jclouds.http.internal;
import java.util.concurrent.ExecutorService;
import javax.annotation.Resource;
import javax.inject.Inject;
import javax.inject.Named;
import org.jclouds.http.HttpConstants;
import org.jclouds.logging.Logger;
import org.jclouds.logging.internal.Wire;
/**
* Logs data to the wire LOG.
*
* @author Adrian Cole
* @see org.apache.HttpWire.impl.conn.Wire
*/
public class HttpWire extends Wire {
@Resource
@Named(HttpConstants.HTTP_WIRE_LOGGER)
Logger wireLog = Logger.NULL;
@Inject
public HttpWire(ExecutorService exec) {
super(exec);
}
public Logger getWireLog() {
return wireLog;
}
}

View File

@ -66,7 +66,7 @@ public class JavaUrlHttpCommandExecutorService extends
@Inject
public JavaUrlHttpCommandExecutorService(ExecutorService executorService,
DelegatingRetryHandler retryHandler, DelegatingErrorHandler errorHandler, Wire wire) {
DelegatingRetryHandler retryHandler, DelegatingErrorHandler errorHandler, HttpWire wire) {
super(executorService, retryHandler, errorHandler, wire);
sslMap = Maps.newHashMap();
}

View File

@ -0,0 +1,57 @@
/**
*
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
*
* ====================================================================
* 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 org.jclouds.http.internal;
import java.util.concurrent.ExecutorService;
import javax.annotation.Resource;
import javax.inject.Inject;
import javax.inject.Named;
import org.jclouds.http.HttpConstants;
import org.jclouds.logging.Logger;
import org.jclouds.logging.internal.Wire;
/**
* Logs data to the wire LOG.
*
* @author Adrian Cole
* @see org.apache.HttpWire.impl.conn.Wire
*/
public class SignatureWire extends Wire {
@Resource
@Named(HttpConstants.SIGNATURE_WIRE_LOGGER)
Logger wireLog = Logger.NULL;
@Inject
public SignatureWire(ExecutorService exec) {
super(exec);
}
public Logger getWireLog() {
return wireLog;
}
}

View File

@ -1,6 +1,6 @@
/**
*
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
* Copyright (C) 2009 Global Cloud Specialists, Inc. <info@globalcloudspecialists.com>
*
* ====================================================================
* Licensed to the Apache Software Foundation (ASF) under one
@ -21,7 +21,7 @@
* under the License.
* ====================================================================
*/
package org.jclouds.http.internal;
package org.jclouds.logging.internal;
import static com.google.common.base.Preconditions.checkNotNull;
@ -37,34 +37,28 @@ import java.util.concurrent.ExecutorService;
import javax.annotation.Resource;
import javax.inject.Inject;
import javax.inject.Named;
import org.apache.commons.io.IOUtils;
import org.apache.commons.io.input.TeeInputStream;
import org.jclouds.concurrent.SingleThreaded;
import org.jclouds.http.HttpConstants;
import org.jclouds.logging.Logger;
/**
* Logs data to the wire LOG.
*
* @author Adrian Cole
* @see org.apache.http.impl.conn.Wire
* @see org.apache.HttpWire.impl.conn.Wire
*/
public class Wire {
public abstract class Wire {
@Resource
@Named(HttpConstants.HTTP_WIRE_LOGGER)
protected Logger wireLog = Logger.NULL;
@Resource
protected Logger logger = Logger.NULL;
private final ExecutorService exec;
protected final ExecutorService exec;
@Inject
public Wire(ExecutorService exec) {
this.exec = checkNotNull(exec, "executor");
}
protected abstract Logger getWireLog();
private void wire(String header, InputStream instream) {
StringBuilder buffer = new StringBuilder();
@ -77,7 +71,7 @@ public class Wire {
buffer.append("[\\n]\"");
buffer.insert(0, "\"");
buffer.insert(0, header);
wireLog.debug(buffer.toString());
getWireLog().debug(buffer.toString());
buffer.setLength(0);
} else if ((ch < 32) || (ch > 127)) {
buffer.append("[0x");
@ -91,7 +85,7 @@ public class Wire {
buffer.append('\"');
buffer.insert(0, '\"');
buffer.insert(0, header);
wireLog.debug(buffer.toString());
getWireLog().debug(buffer.toString());
}
} catch (IOException e) {
logger.error(e, "Error tapping line");
@ -99,7 +93,7 @@ public class Wire {
}
public boolean enabled() {
return wireLog.isDebugEnabled();
return getWireLog().isDebugEnabled();
}
public InputStream copy(final String header, InputStream instream) {
@ -141,7 +135,7 @@ public class Wire {
@SuppressWarnings("unchecked")
public <T> T output(T data) {
checkNotNull(data, "data must be set before calling generateETag()");
checkNotNull(data, "data");
if (data instanceof InputStream) {
if (exec.getClass().isAnnotationPresent(SingleThreaded.class))
return (T) copy(">> ", (InputStream) data);
@ -186,4 +180,4 @@ public class Wire {
output(checkNotNull(s, "output").getBytes());
}
}
}

View File

@ -39,7 +39,7 @@ import org.jclouds.http.TransformingHttpCommandExecutorServiceImpl;
import org.jclouds.http.TransformingHttpCommandImpl;
import org.jclouds.http.functions.ReturnStringIf200;
import org.jclouds.http.internal.JavaUrlHttpCommandExecutorService;
import org.jclouds.http.internal.Wire;
import org.jclouds.http.internal.HttpWire;
import org.jclouds.logging.Logger;
import org.jclouds.logging.Logger.LoggerFactory;
import org.testng.annotations.BeforeTest;
@ -93,7 +93,7 @@ public class BackoffLimitedRetryHandlerTest {
void setupExecutorService() throws Exception {
ExecutorService execService = Executors.newCachedThreadPool();
JavaUrlHttpCommandExecutorService httpService = new JavaUrlHttpCommandExecutorService(
execService, new DelegatingRetryHandler(), new DelegatingErrorHandler(), new Wire(
execService, new DelegatingRetryHandler(), new DelegatingErrorHandler(), new HttpWire(
Executors.newCachedThreadPool()));
executorService = new TransformingHttpCommandExecutorServiceImpl(httpService, execService,
new LoggerFactory() {

View File

@ -40,6 +40,7 @@ import java.util.concurrent.TimeUnit;
import org.apache.commons.io.IOUtils;
import org.jclouds.concurrent.WithinThreadExecutorService;
import org.jclouds.http.HttpUtils;
import org.jclouds.http.internal.HttpWire;
import org.jclouds.logging.Logger;
import org.testng.annotations.Test;
@ -61,7 +62,7 @@ public class WireLiveTest {
}
public Void call() throws Exception {
Wire wire = setUp();
HttpWire wire = setUp();
InputStream in = wire.input(fromServer);
ByteArrayOutputStream out = new ByteArrayOutputStream();
IOUtils.copy(in, out);
@ -69,7 +70,7 @@ public class WireLiveTest {
Thread.sleep(100);
assertEquals(HttpUtils.toHexString(compare), checkNotNull(sysHttpStreamMd5,
sysHttpStreamMd5));
assertEquals(((BufferLogger) wire.wireLog).buff.toString().getBytes().length, 3331484);
assertEquals(((BufferLogger) wire.getWireLog()).buff.toString().getBytes().length, 3331484);
return null;
}
}
@ -125,19 +126,19 @@ public class WireLiveTest {
}
public static Wire setUp() throws Exception {
public static HttpWire setUp() throws Exception {
ExecutorService service = Executors.newCachedThreadPool();
BufferLogger bufferLogger = new BufferLogger();
Wire wire = new Wire(service);
wire.wireLog = bufferLogger;
HttpWire wire = new HttpWire(service);
wire.wireLog = (bufferLogger);
return wire;
}
public Wire setUpSynch() throws Exception {
public HttpWire setUpSynch() throws Exception {
ExecutorService service = new WithinThreadExecutorService();
BufferLogger bufferLogger = new BufferLogger();
Wire wire = new Wire(service);
wire.wireLog = bufferLogger;
HttpWire wire = new HttpWire(service);
wire.wireLog = (bufferLogger);
return wire;
}
@ -145,12 +146,12 @@ public class WireLiveTest {
public void testRemoteInputInputStream() throws Exception {
URL url = new URL(checkNotNull(sysHttpStreamUrl, "sysHttpStreamUrl"));
URLConnection connection = url.openConnection();
Wire wire = setUp();
HttpWire wire = setUp();
InputStream in = wire.input(connection.getInputStream());
byte[] compare = HttpUtils.md5(in);
Thread.sleep(100);
assertEquals(HttpUtils.toHexString(compare), checkNotNull(sysHttpStreamMd5, sysHttpStreamMd5));
assertEquals(((BufferLogger) wire.wireLog).buff.toString().getBytes().length, 3331484);
assertEquals(((BufferLogger) wire.getWireLog()).buff.toString().getBytes().length, 3331484);
}
@Test(groups = "live")
@ -166,12 +167,12 @@ public class WireLiveTest {
public void testRemoteInputInputStreamSynch() throws Exception {
URL url = new URL(checkNotNull(sysHttpStreamUrl, "sysHttpStreamUrl"));
URLConnection connection = url.openConnection();
Wire wire = setUpSynch();
HttpWire wire = setUpSynch();
InputStream in = wire.input(connection.getInputStream());
byte[] compare = HttpUtils.md5(in);
Thread.sleep(100);
assertEquals(HttpUtils.toHexString(compare), checkNotNull(sysHttpStreamMd5, sysHttpStreamMd5));
assertEquals(((BufferLogger) wire.wireLog).buff.toString().getBytes().length, 3331484);
assertEquals(((BufferLogger) wire.getWireLog()).buff.toString().getBytes().length, 3331484);
}
}

View File

@ -31,6 +31,7 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.jclouds.concurrent.WithinThreadExecutorService;
import org.jclouds.http.internal.HttpWire;
import org.jclouds.logging.Logger;
import org.jclouds.util.Utils;
import org.testng.annotations.Test;
@ -93,57 +94,57 @@ public class WireTest {
}
public Wire setUp() throws Exception {
public HttpWire setUp() throws Exception {
ExecutorService service = Executors.newCachedThreadPool();
BufferLogger bufferLogger = new BufferLogger();
Wire wire = new Wire(service);
wire.wireLog = bufferLogger;
HttpWire wire = new HttpWire(service);
wire.wireLog = (bufferLogger);
return wire;
}
public Wire setUpSynch() throws Exception {
public HttpWire setUpSynch() throws Exception {
ExecutorService service = new WithinThreadExecutorService();
BufferLogger bufferLogger = new BufferLogger();
Wire wire = new Wire(service);
wire.wireLog = bufferLogger;
HttpWire wire = new HttpWire(service);
wire.wireLog = (bufferLogger);
return wire;
}
public void testInputInputStream() throws Exception {
Wire wire = setUp();
HttpWire wire = setUp();
InputStream in = wire.input(new ByteArrayInputStream("foo".getBytes()));
String compare = Utils.toStringAndClose(in);
Thread.sleep(100);
assertEquals(compare, "foo");
assertEquals(((BufferLogger) wire.wireLog).buff.toString(), "<< \"foo\"");
assertEquals(((BufferLogger) wire.getWireLog()).buff.toString(), "<< \"foo\"");
}
public void testInputInputStreamSynch() throws Exception {
Wire wire = setUpSynch();
HttpWire wire = setUpSynch();
InputStream in = wire.input(new ByteArrayInputStream("foo".getBytes()));
String compare = Utils.toStringAndClose(in);
assertEquals(compare, "foo");
assertEquals(((BufferLogger) wire.wireLog).buff.toString(), "<< \"foo\"");
assertEquals(((BufferLogger) wire.getWireLog()).buff.toString(), "<< \"foo\"");
}
public void testOutputInputStream() throws Exception {
Wire wire = setUp();
HttpWire wire = setUp();
InputStream in = wire.output(new ByteArrayInputStream("foo".getBytes()));
String compare = Utils.toStringAndClose(in);
Thread.sleep(100);
assertEquals(compare, "foo");
assertEquals(((BufferLogger) wire.wireLog).buff.toString(), ">> \"foo\"");
assertEquals(((BufferLogger) wire.getWireLog()).buff.toString(), ">> \"foo\"");
}
public void testOutputBytes() throws Exception {
Wire wire = setUp();
HttpWire wire = setUp();
wire.output("foo".getBytes());
assertEquals(((BufferLogger) wire.wireLog).buff.toString(), ">> \"foo\"");
assertEquals(((BufferLogger) wire.getWireLog()).buff.toString(), ">> \"foo\"");
}
public void testOutputString() throws Exception {
Wire wire = setUp();
HttpWire wire = setUp();
wire.output("foo");
assertEquals(((BufferLogger) wire.wireLog).buff.toString(), ">> \"foo\"");
assertEquals(((BufferLogger) wire.getWireLog()).buff.toString(), ">> \"foo\"");
}
}

View File

@ -46,7 +46,7 @@ import org.jclouds.http.HttpResponse;
import org.jclouds.http.handlers.DelegatingErrorHandler;
import org.jclouds.http.handlers.DelegatingRetryHandler;
import org.jclouds.http.internal.BaseHttpCommandExecutorService;
import org.jclouds.http.internal.Wire;
import org.jclouds.http.internal.HttpWire;
import com.google.appengine.api.urlfetch.FetchOptions;
import com.google.appengine.api.urlfetch.HTTPHeader;
@ -68,7 +68,7 @@ public class GaeHttpCommandExecutorService extends BaseHttpCommandExecutorServic
@Inject
public GaeHttpCommandExecutorService(URLFetchService urlFetchService,
ExecutorService executorService, DelegatingRetryHandler retryHandler,
DelegatingErrorHandler errorHandler, Wire wire) {
DelegatingErrorHandler errorHandler, HttpWire wire) {
super(executorService, retryHandler, errorHandler, wire);
this.urlFetchService = urlFetchService;
}

View File

@ -47,7 +47,7 @@ import org.jclouds.http.HttpRequest;
import org.jclouds.http.HttpResponse;
import org.jclouds.http.handlers.DelegatingErrorHandler;
import org.jclouds.http.handlers.DelegatingRetryHandler;
import org.jclouds.http.internal.Wire;
import org.jclouds.http.internal.HttpWire;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
@ -71,7 +71,7 @@ public class GaeHttpCommandExecutorServiceTest {
endPoint = URI.create("http://localhost:80/foo");
client = new GaeHttpCommandExecutorService(createNiceMock(URLFetchService.class),
createNiceMock(ExecutorService.class), createNiceMock(DelegatingRetryHandler.class),
createNiceMock(DelegatingErrorHandler.class), createNiceMock(Wire.class));
createNiceMock(DelegatingErrorHandler.class), createNiceMock(HttpWire.class));
}
@Test

View File

@ -45,7 +45,7 @@ import org.jclouds.http.HttpRequestFilter;
import org.jclouds.http.handlers.DelegatingErrorHandler;
import org.jclouds.http.handlers.DelegatingRetryHandler;
import org.jclouds.http.httpnio.util.NioHttpUtils;
import org.jclouds.http.internal.Wire;
import org.jclouds.http.internal.HttpWire;
import org.jclouds.logging.Logger;
/**
@ -57,7 +57,7 @@ public class NioHttpCommandExecutionHandler implements NHttpRequestExecutionHand
private final ConsumingNHttpEntityFactory entityFactory;
private final DelegatingRetryHandler retryHandler;
private final DelegatingErrorHandler errorHandler;
private final Wire wire;
private final HttpWire wire;
/**
* inputOnly: nothing is taken from this queue.
@ -73,7 +73,7 @@ public class NioHttpCommandExecutionHandler implements NHttpRequestExecutionHand
@Inject
public NioHttpCommandExecutionHandler(ConsumingNHttpEntityFactory entityFactory,
BlockingQueue<HttpCommandRendezvous<?>> resubmitQueue,
DelegatingRetryHandler retryHandler, DelegatingErrorHandler errorHandler, Wire wire) {
DelegatingRetryHandler retryHandler, DelegatingErrorHandler errorHandler, HttpWire wire) {
this.entityFactory = entityFactory;
this.resubmitQueue = resubmitQueue;
this.retryHandler = retryHandler;