/*
* 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
*
* 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 org.apache.streams.components.http.HttpPersistWriterConfiguration;
import org.apache.streams.components.http.persist.SimpleHTTPPostPersistWriter;
import org.apache.streams.core.StreamsDatum;
import org.apache.streams.jackson.StreamsJacksonMapper;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import static org.mockito.Matchers.any;
/**
* Test for
* @see org.apache.streams.components.http.persist.SimpleHTTPPostPersistWriter
*/
@RunWith(PowerMockRunner.class)
@PrepareForTest({HttpClients.class, CloseableHttpResponse.class, CloseableHttpResponse.class})
public class SimpleHTTPPostPersistWriterTest {
private ObjectMapper mapper = StreamsJacksonMapper.getInstance();
/**
* test port.
*/
private static final int PORT = 18080;
/**
* test hosts.
*/
private static final String HOSTNAME = "localhost";
/**
* test protocol.
*/
private static final String PROTOCOL = "http";
/**
* CloseableHttpClient mock.
*/
private CloseableHttpClient client;
/**
* CloseableHttpClient mock.
*/
private CloseableHttpResponse response = Mockito.mock(CloseableHttpResponse.class);
/**
* Our output.
*/
private ByteArrayOutputStream output;
/**
* Our input.
*/
private ByteArrayInputStream input;
@Before
public void setUp() throws Exception
{
/*
HttpClients mock.
*/
this.client = PowerMockito.mock(CloseableHttpClient.class);
PowerMockito.mockStatic(HttpClients.class);
PowerMockito.when(HttpClients.createDefault())
.thenReturn(client);
PowerMockito.when(client.execute(any(HttpUriRequest.class)))
.thenReturn(response);
Mockito.when(response.getEntity()).thenReturn(null);
Mockito.doNothing().when(response).close();
}
/**
* testPersist.
* @throws Exception
*/
@Test
public void testPersist() throws Exception
{
HttpPersistWriterConfiguration configuration = new HttpPersistWriterConfiguration();
configuration.setProtocol(PROTOCOL);
configuration.setHostname(HOSTNAME);
configuration.setPort((long) PORT);
configuration.setResourcePath("/");
/*
Instance under tests.
*/
SimpleHTTPPostPersistWriter writer = new SimpleHTTPPostPersistWriter(configuration);
writer.prepare(null);
StreamsDatum testDatum = new StreamsDatum(mapper.readValue("{\"message\":\"ping\"}", ObjectNode.class));
writer.write(testDatum);
Mockito.verify(this.client).execute(any(HttpUriRequest.class));
Mockito.verify(this.response).close();
}
}