Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions okhttp/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.baeldung.okhttp</groupId>
<artifactId>okhttp</artifactId>
<version>0.0.1-SNAPSHOT</version>

<dependencies>

<!-- okhttp -->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>${com.squareup.okhttp3.version}</version>
</dependency>

<!-- test scoped -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-library</artifactId>
<version>${org.hamcrest.version}</version>
<scope>test</scope>
</dependency>

</dependencies>

<properties>

<!-- okhttp -->
<com.squareup.okhttp3.version>3.4.1</com.squareup.okhttp3.version>

<!-- testing -->
<org.hamcrest.version>1.3</org.hamcrest.version>
<junit.version>4.12</junit.version>
</properties>


</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package org.baeldung.okhttp;

import java.io.IOException;

import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;

public class DefaultContentTypeInterceptor implements Interceptor {

private final String contentType;

public DefaultContentTypeInterceptor(String contentType) {
this.contentType = contentType;
}

public Response intercept(Interceptor.Chain chain) throws IOException {

Request originalRequest = chain.request();
Request requestWithUserAgent = originalRequest.newBuilder()
.header("Content-Type", contentType)
.build();

return chain.proceed(requestWithUserAgent);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
package org.baeldung.okhttp;

import okhttp3.RequestBody;
import okhttp3.MediaType;

import java.io.IOException;

import okio.Buffer;
import okio.BufferedSink;
import okio.ForwardingSink;
import okio.Okio;
import okio.Sink;

public class ProgressRequestWrapper extends RequestBody {

protected RequestBody delegate;
protected ProgressListener listener;

protected CountingSink countingSink;

public ProgressRequestWrapper(RequestBody delegate, ProgressListener listener) {
this.delegate = delegate;
this.listener = listener;
}

@Override
public MediaType contentType() {
return delegate.contentType();
}

@Override
public long contentLength() throws IOException {
return delegate.contentLength();
}

@Override
public void writeTo(BufferedSink sink) throws IOException {

BufferedSink bufferedSink;

countingSink = new CountingSink(sink);
bufferedSink = Okio.buffer(countingSink);

delegate.writeTo(bufferedSink);

bufferedSink.flush();
}

protected final class CountingSink extends ForwardingSink {

private long bytesWritten = 0;

public CountingSink(Sink delegate) {
super(delegate);
}

@Override
public void write(Buffer source, long byteCount) throws IOException {

super.write(source, byteCount);

bytesWritten += byteCount;
listener.onRequestProgress(bytesWritten, contentLength());
}

}

public static interface ProgressListener {

public void onRequestProgress(long bytesWritten, long contentLength);

}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
package org.baeldung.okhttp;

import static org.hamcrest.Matchers.equalTo;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;

import java.io.File;
import java.io.IOException;

import org.baeldung.okhttp.ProgressRequestWrapper;
import org.junit.Test;

import okhttp3.Call;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class OkHttpFileUploadingTest {

private static final String BASE_URL = "http://localhost:8080/spring-rest";

@Test
public void whenUploadFileUsingOkHttp_thenCorrect() throws IOException {

OkHttpClient client = new OkHttpClient();

RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("file", "file.txt",
RequestBody.create(MediaType.parse("application/octet-stream"), new File("src/test/resources/test.txt")))
.build();

Request request = new Request.Builder()
.url(BASE_URL + "/users/upload")
.post(requestBody)
.build();

Call call = client.newCall(request);
Response response = call.execute();

assertThat(response.code(), equalTo(200));
}

@Test
public void whenGetUploadFileProgressUsingOkHttp_thenCorrect() throws IOException {

OkHttpClient client = new OkHttpClient();

RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("file", "file.txt",
RequestBody.create(MediaType.parse("application/octet-stream"), new File("src/test/resources/test.txt")))
.build();


ProgressRequestWrapper.ProgressListener listener = new ProgressRequestWrapper.ProgressListener() {

public void onRequestProgress(long bytesWritten, long contentLength) {

float percentage = 100f * bytesWritten / contentLength;
assertFalse(Float.compare(percentage, 100) > 0);
}
};

ProgressRequestWrapper countingBody = new ProgressRequestWrapper(requestBody, listener);

Request request = new Request.Builder()
.url(BASE_URL + "/users/upload")
.post(countingBody)
.build();

Call call = client.newCall(request);
Response response = call.execute();

assertThat(response.code(), equalTo(200));

}
}
78 changes: 78 additions & 0 deletions okhttp/src/test/java/org/baeldung/okhttp/OkHttpGetTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package org.baeldung.okhttp;

import static org.hamcrest.Matchers.equalTo;
import static org.junit.Assert.assertThat;

import java.io.IOException;

import org.junit.Test;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.HttpUrl;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class OkHttpGetTest {

private static final String BASE_URL = "http://localhost:8080/spring-rest";

@Test
public void whenGetRequestUsingOkHttp_thenCorrect() throws IOException {

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
.url(BASE_URL + "/date")
.build();

Call call = client.newCall(request);
Response response = call.execute();

assertThat(response.code(), equalTo(200));
}

@Test
public void whenGetRequestWithQueryParameterUsingOkHttp_thenCorrect() throws IOException {

OkHttpClient client = new OkHttpClient();

HttpUrl.Builder urlBuilder = HttpUrl.parse(BASE_URL + "/ex/bars").newBuilder();
urlBuilder.addQueryParameter("id", "1");

String url = urlBuilder.build().toString();

Request request = new Request.Builder()
.url(url)
.build();

Call call = client.newCall(request);
Response response = call.execute();

assertThat(response.code(), equalTo(200));
}

@Test
public void whenAsynchronousGetRequestUsingOkHttp_thenCorrect() {

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
.url(BASE_URL + "/date")
.build();

Call call = client.newCall(request);

call.enqueue(new Callback() {

public void onResponse(Call call, Response response) throws IOException {
assertThat(response.code(), equalTo(200));
}

public void onFailure(Call call, IOException e) {

}
});
}
}
48 changes: 48 additions & 0 deletions okhttp/src/test/java/org/baeldung/okhttp/OkHttpHeaderTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package org.baeldung.okhttp;

import java.io.IOException;

import org.junit.Test;

import okhttp3.Call;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class OkHttpHeaderTest {

private static final String SAMPLE_URL = "http://www.github.com";

@Test
public void whenSetHeaderUsingOkHttp_thenCorrect() throws IOException {

OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
.url(SAMPLE_URL)
.addHeader("Content-Type", "application/json")
.build();

Call call = client.newCall(request);
Response response = call.execute();
response.close();
}

@Test
public void whenSetDefaultHeaderUsingOkHttp_thenCorrect() throws IOException {

OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new DefaultContentTypeInterceptor("application/json"))
.build();

Request request = new Request.Builder()
.url(SAMPLE_URL)
.build();

Call call = client.newCall(request);
Response response = call.execute();
response.close();
}


}
Loading