com.ibm.sbt.test.lib.MockService.java Source code

Java tutorial

Introduction

Here is the source code for com.ibm.sbt.test.lib.MockService.java

Source

package com.ibm.sbt.test.lib;
/*
 *  Copyright IBM Corp. 2013
 * 
 * Licensed 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.
 */

import org.apache.commons.codec.binary.StringUtils;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.impl.client.DefaultHttpClient;
import org.junit.Assert;
import org.junit.runner.Request;

import com.ibm.commons.util.StringUtil;
import com.ibm.sbt.services.client.ClientService;
import com.ibm.sbt.services.client.ClientServicesException;
import com.ibm.sbt.services.endpoints.BasicEndpoint;

/**
 * 
 * @author Carlos Manias
 * 
 */
public class MockService extends ClientService {

    public enum MockMode {
        RECORD, REPLAY, PASSTHROUGH
    }

    private MockMode mode;
    private ClientService service;
    private MockSerializer serializer;

    public MockService(ClientService svc) {
        this(svc, "passthrough");
    }

    public MockService(ClientService svc, String mockMode) {
        this.service = svc;
        this.endpoint = svc.getEndpoint();
        serializer = new MockSerializer(endpoint);
        this.mode = StringUtil.isEmpty(mockMode) ? MockMode.PASSTHROUGH : MockMode.valueOf(mockMode.toUpperCase());
    }

    @Override
    protected HttpResponse executeRequest(HttpClient httpClient, HttpRequestBase httpRequestBase, Args args)
            throws ClientServicesException {

        switch (this.mode) {
        case REPLAY:
            return serializer.replayResponse();
        case PASSTHROUGH:
            return super.executeRequest(httpClient, httpRequestBase, args);
        case RECORD:
            HttpResponse response;
            response = super.executeRequest(httpClient, httpRequestBase, args);
            System.out.println(httpRequestBase.getMethod() + " " + httpRequestBase.getURI() + ": "
                    + response.getStatusLine().getStatusCode());
            return serializer.recordResponse(response);
        default:
            throw new UnsupportedOperationException("Invalid mode " + this.mode);
        }
    }

    protected void initialize(DefaultHttpClient httpClient) throws ClientServicesException {
        if (TestEnvironment.getRequiresAuthentication()) {
            if (StringUtil.isEmpty(((BasicEndpoint) endpoint).getPassword())) {
                //PBastide: Commented out as it generates needless data in the log of the build
                //logger.warning("configure the endpoint " + endpoint.getLabel() + " password - TEST WILL WORK ONLY IN MOCK MODE");
            }
            super.initialize(httpClient);
        }

    }

}