Android Open Source - Volley-Ball File Mock Network






From Project

Back to project page Volley-Ball.

License

The source code is released under:

MIT License

If you think the Android project Volley-Ball listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.siu.android.volleyball.mock;
/*from   w w w.ja v  a 2 s.  c o m*/
import android.content.Context;

import com.android.volley.Network;
import com.android.volley.NetworkResponse;
import com.android.volley.NoConnectionError;
import com.android.volley.Request;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.HttpStack;
import com.siu.android.volleyball.exception.BallException;
import com.siu.android.volleyball.util.BallLogger;
import com.siu.android.volleyball.util.ConfigUtils;
import com.siu.android.volleyball.util.RequestUtils;

import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

/**
 * Created by lukas on 8/29/13.
 */
public class FileMockNetwork implements Network {


    private Context mContext;
    private Config mConfig;

    public FileMockNetwork(Context context) {
        this(context, new Config());
    }

    public FileMockNetwork(Context context, Config config) {
        mContext = context;
        mConfig = config;

        // configure the real network for non mocked requests
        if (config.mRealNetwork == null) {
            HttpStack httpStack = (config.mRealNetworkHttpStack == null) ? ConfigUtils.getDefaultHttpStack(mContext) : config.mRealNetworkHttpStack;
            config.mRealNetwork = ConfigUtils.getDefaultNetwork(httpStack);
        }

        if (!mConfig.mBasePath.equals("") && !mConfig.mBasePath.endsWith("/")) {
            mConfig.mBasePath += "/";
        }
    }


    @Override
    public NetworkResponse performRequest(Request<?> request) throws VolleyError {
        if (!shouldMock(request)) {
            return mConfig.mRealNetwork.performRequest(request);
        }

        Mock mock = getMock(request);

        String filePath = mConfig.mBasePath + mock.mFilename;
        BallLogger.d("Mock file path = %s", filePath);

        InputStream is = null;
        byte[] data;
        try {
            is = mContext.getAssets().open(filePath);
            data = IOUtils.toByteArray(is);

        } catch (IOException e) {
            BallLogger.e("Error opening mock file for path %s", filePath);
            throw new NoConnectionError(e);
        } finally {
            IOUtils.closeQuietly(is);
        }

        Map<String, String> headers = new HashMap<String, String>();
        headers.put("Content-Type", mock.mContentType);
        return new NetworkResponse(200, data, headers, false);
    }

    /**
     * Default implementation mocks every request
     *
     * @param request the request that can be mocked
     * @return if the request should be mocked
     */
    protected boolean shouldMock(Request request) {
        return true;
    }

    /**
     * Default implementation respond with file named by the request url last path with ".json" suffix
     * and a content type set to "content/json".
     * <p/>
     * Examples:
     * - GET http://some.url.com/entries                -> get_entries.json
     * - GET http://some.url.com/entries?bla=foobar     -> get_entries.json
     * - POST http://some.url.com/entries               -> post_entries.json
     *
     * @param request the request that will be mocked
     * @return the mock associated to the request
     */
    protected Mock getMock(Request request) {
        if (!request.getUrl().contains("/") || request.getUrl().equals("/")) {
            throw new BallException("Invalid request url for mock, can't determine what is the last path to get the associated mock file : %s", request.getUrl());
        }

        String path = request.getUrl();

        if (path.lastIndexOf("/") == path.length() - 1) {
            path = path.substring(0, path.length() - 2);
        }

        path = FilenameUtils.getBaseName(path);

        if (path.contains("?")) {
            path = path.substring(0, path.indexOf("?"));
        }

        path = RequestUtils.methodToString(request.getMethod()) + "_" + path + ".json";
        path = path.toLowerCase();

        BallLogger.d("Mock request last path %s", path);

        return new Mock(path, "content/json");
    }

    protected static class Mock {
        protected String mFilename;
        protected String mContentType;

        public Mock(String filename, String contentType) {
            mFilename = filename;
            mContentType = contentType;
        }

        public String getFilename() {
            return mFilename;
        }

        public void setFilename(String filename) {
            mFilename = filename;
        }

        public String getContentType() {
            return mContentType;
        }

        public void setContentType(String contentType) {
            mContentType = contentType;
        }
    }

    public static class Config {
        protected Network mRealNetwork;
        protected HttpStack mRealNetworkHttpStack;
        protected String mBasePath = "";
        protected double mRequestDuration = 0.5;

        public Config basePath(String basePath) {
            mBasePath = basePath;
            return this;
        }

        public Config requestDuration(double requestDuration) {
            mRequestDuration = requestDuration;
            return this;
        }

        public Config realNetwork(Network realNetwork) {
            mRealNetwork = realNetwork;
            return this;
        }

        public Config realNetworkHttpStack(HttpStack httpStack) {
            mRealNetworkHttpStack = httpStack;
            return this;
        }
    }
}




Java Source Code List

.BallExecutorDelivery.java
.LocalRequest.java
com.android.volley.CompatRequest.java
com.siu.android.volleyball.BallCacheDispatcher.java
com.siu.android.volleyball.BallMarkerLog.java
com.siu.android.volleyball.BallNetworkDispatcher.java
com.siu.android.volleyball.BallRequestQueue.java
com.siu.android.volleyball.BallRequest.java
com.siu.android.volleyball.BallResponseDelivery.java
com.siu.android.volleyball.BallResponse.java
com.siu.android.volleyball.ball.BallExecutorDelivery.java
com.siu.android.volleyball.exception.BallException.java
com.siu.android.volleyball.local.LocalDispatcher.java
com.siu.android.volleyball.local.LocalRequestProcessor.java
com.siu.android.volleyball.mock.FileMockNetwork.java
com.siu.android.volleyball.network.NetworkRequestProcessor.java
com.siu.android.volleyball.request.CompleteRequest.java
com.siu.android.volleyball.request.LocalRequest.java
com.siu.android.volleyball.request.NetworkRequest.java
com.siu.android.volleyball.response.ResponseListener.java
com.siu.android.volleyball.response.SingleResponseListener.java
com.siu.android.volleyball.samples.Application.java
com.siu.android.volleyball.samples.Constants.java
com.siu.android.volleyball.samples.activity.CompleteRequestActivity.java
com.siu.android.volleyball.samples.activity.LocalRequestActivity.java
com.siu.android.volleyball.samples.activity.NetworkRequestActivity.java
com.siu.android.volleyball.samples.activity.ScenariosActivity.java
com.siu.android.volleyball.samples.activity.scenarios.Scenario10Activity.java
com.siu.android.volleyball.samples.activity.scenarios.Scenario1Activity.java
com.siu.android.volleyball.samples.activity.scenarios.Scenario2Activity.java
com.siu.android.volleyball.samples.activity.scenarios.Scenario3Activity.java
com.siu.android.volleyball.samples.activity.scenarios.Scenario4Activity.java
com.siu.android.volleyball.samples.activity.scenarios.Scenario5Activity.java
com.siu.android.volleyball.samples.activity.scenarios.Scenario6Activity.java
com.siu.android.volleyball.samples.activity.scenarios.Scenario7Activity.java
com.siu.android.volleyball.samples.activity.scenarios.Scenario8Activity.java
com.siu.android.volleyball.samples.activity.scenarios.Scenario9Activity.java
com.siu.android.volleyball.samples.activity.scenarios.ScenarioActivity.java
com.siu.android.volleyball.samples.adapter.BindableAdapter.java
com.siu.android.volleyball.samples.adapter.EntriesAdapter.java
com.siu.android.volleyball.samples.adapter.LogsAdapter.java
com.siu.android.volleyball.samples.database.DatabaseHelper.java
com.siu.android.volleyball.samples.database.EntryDao.java
com.siu.android.volleyball.samples.database.mapping.EntryMapping.java
com.siu.android.volleyball.samples.fragment.LocalOnlyRequestFragment.java
com.siu.android.volleyball.samples.model.Entry.java
com.siu.android.volleyball.samples.model.Log.java
com.siu.android.volleyball.samples.util.ScenarioUtils.java
com.siu.android.volleyball.samples.util.SimpleLogger.java
com.siu.android.volleyball.samples.volley.OkHttpStack.java
com.siu.android.volleyball.samples.volley.ScenarioListener.java
com.siu.android.volleyball.samples.volley.fake.FakeCache.java
com.siu.android.volleyball.samples.volley.fake.FakeNetwork.java
com.siu.android.volleyball.samples.volley.request.CompleteEntryRequest.java
com.siu.android.volleyball.samples.volley.request.SampleErrorNetworkRequest.java
com.siu.android.volleyball.samples.volley.request.SampleLocalNoResultRequest.java
com.siu.android.volleyball.samples.volley.request.SampleLocalRequest.java
com.siu.android.volleyball.samples.volley.request.SampleNetworkRequest.java
com.siu.android.volleyball.samples.volley.request.SampleRequest.java
com.siu.android.volleyball.samples.volley.request.ScenarioRequest.java
com.siu.android.volleyball.toolbox.BallImageLoader.java
com.siu.android.volleyball.toolbox.BallImageRequest.java
com.siu.android.volleyball.toolbox.BallNetworkImageView.java
com.siu.android.volleyball.toolbox.BallRequestFuture.java
com.siu.android.volleyball.toolbox.VolleyBallConfig.java
com.siu.android.volleyball.toolbox.VolleyBall.java
com.siu.android.volleyball.util.BallLogger.java
com.siu.android.volleyball.util.ConfigUtils.java
com.siu.android.volleyball.util.RequestUtils.java