15f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen/*
25f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen * Copyright (C) 2010 The Android Open Source Project
35f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen *
45f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen * Licensed under the Apache License, Version 2.0 (the "License");
55f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen * you may not use this file except in compliance with the License.
65f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen * You may obtain a copy of the License at
75f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen *
85f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen *      http://www.apache.org/licenses/LICENSE-2.0
95f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen *
105f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen * Unless required by applicable law or agreed to in writing, software
115f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen * distributed under the License is distributed on an "AS IS" BASIS,
125f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen * See the License for the specific language governing permissions and
145f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen * limitations under the License.
155f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen */
165f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen
175f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyenpackage coretestutils.http;
185f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen
195f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyenimport java.util.List;
205f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen
215f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen/**
225f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen * An HTTP request that came into the mock web server.
235f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen */
245f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyenpublic final class RecordedRequest {
255f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen    private final String requestLine;
265f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen    private final List<String> headers;
275f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen    private final List<Integer> chunkSizes;
285f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen    private final int bodySize;
295f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen    private final byte[] body;
305f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen    private final int sequenceNumber;
315f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen
325f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen    RecordedRequest(String requestLine, List<String> headers, List<Integer> chunkSizes,
335f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen            int bodySize, byte[] body, int sequenceNumber) {
345f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen        this.requestLine = requestLine;
355f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen        this.headers = headers;
365f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen        this.chunkSizes = chunkSizes;
375f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen        this.bodySize = bodySize;
385f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen        this.body = body;
395f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen        this.sequenceNumber = sequenceNumber;
405f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen    }
415f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen
425f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen    public String getRequestLine() {
435f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen        return requestLine;
445f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen    }
455f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen
465f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen    public List<String> getHeaders() {
475f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen        return headers;
485f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen    }
495f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen
505f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen    /**
515f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen     * Returns the sizes of the chunks of this request's body, or an empty list
525f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen     * if the request's body was empty or unchunked.
535f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen     */
545f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen    public List<Integer> getChunkSizes() {
555f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen        return chunkSizes;
565f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen    }
575f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen
585f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen    /**
595f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen     * Returns the total size of the body of this POST request (before
605f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen     * truncation).
615f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen     */
625f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen    public int getBodySize() {
635f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen        return bodySize;
645f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen    }
655f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen
665f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen    /**
675f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen     * Returns the body of this POST request. This may be truncated.
685f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen     */
695f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen    public byte[] getBody() {
705f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen        return body;
715f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen    }
725f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen
735f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen    /**
745f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen     * Returns the index of this request on its HTTP connection. Since a single
755f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen     * HTTP connection may serve multiple requests, each request is assigned its
765f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen     * own sequence number.
775f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen     */
785f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen    public int getSequenceNumber() {
795f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen        return sequenceNumber;
805f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen    }
815f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen
825f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen    @Override public String toString() {
835f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen        return requestLine;
845f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen    }
855f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen
865f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen    public String getMethod() {
875f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen        return getRequestLine().split(" ")[0];
885f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen    }
895f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen
905f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen    public String getPath() {
915f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen        return getRequestLine().split(" ")[1];
925f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen    }
935f53bca55b2c9e217dee12bff8ce55e168829783Neal Nguyen}
94