blob: cc91fed7a34b4a2137e76092d0bce9e792135a02 [file] [log] [blame]
/*
* 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.apache.unomi.itests;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.apache.unomi.api.ContextRequest;
import org.apache.unomi.api.ContextResponse;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.ops4j.pax.exam.junit.PaxExam;
import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
import org.ops4j.pax.exam.spi.reactors.PerSuite;
import java.io.IOException;
@RunWith(PaxExam.class)
@ExamReactorStrategy(PerSuite.class)
public class BasicIT extends BaseIT {
private static final String JSON_MYME_TYPE = "application/json";
private ObjectMapper objectMapper = new ObjectMapper();
@Test
public void testContextJS() throws IOException {
HttpUriRequest request = new HttpGet(URL + "/context.js?sessionId=aa3b04bd-8f4d-4a07-8e96-d33ffa04d3d9");
CloseableHttpResponse response = HttpClientBuilder.create().build().execute(request);
// The underlying HTTP connection is still held by the response object
// to allow the response content to be streamed directly from the network socket.
// In order to ensure correct deallocation of system resources
// the profile MUST call CloseableHttpResponse#close() from a finally clause.
// Please note that if response content is not fully consumed the underlying
// connection cannot be safely re-used and will be shut down and discarded
// by the connection manager.
String responseContent = null;
try {
System.out.println(response.getStatusLine());
HttpEntity entity = response.getEntity();
// do something useful with the response body
// and ensure it is fully consumed
responseContent = EntityUtils.toString(entity);
} finally {
response.close();
}
Assert.assertTrue("Response should contain context object", responseContent.contains("window.digitalData = window.digitalData || {};"));
// @todo we should check the validity of the context object, but this is rather complex since it would
// potentially require parsing the Javascript !
}
@Test
public void testContextJSON() throws IOException {
String sessionId = "aa3b04bd-8f4d-4a07-8e96-d33ffa04d3d9";
ContextRequest contextRequest = new ContextRequest();
// contextRequest.setSource(new EventSource());
// contextRequest.getSource().setId("af6f393a-a537-4586-991b-8521b9c7b05b");
HttpPost request = new HttpPost(URL + "/context.json?sessionId=" + sessionId);
request.setEntity(new StringEntity(objectMapper.writeValueAsString(contextRequest), ContentType.create("application/json")));
CloseableHttpResponse response = HttpClientBuilder.create().build().execute(request);
try {
// validate mimeType
String mimeType = ContentType.getOrDefault(response.getEntity()).getMimeType();
Assert.assertEquals("Response content type should be " + JSON_MYME_TYPE, JSON_MYME_TYPE, mimeType);
// validate context
ContextResponse context = TestUtils.retrieveResourceFromResponse(response, ContextResponse.class);
Assert.assertNotNull("Context should not be null", context);
Assert.assertNotNull("Context profileId should not be null", context.getProfileId());
Assert.assertEquals("Context sessionId should be the same as the sessionId used to request the context", sessionId, context.getSessionId());
} finally {
response.close();
}
}
}