org.sfs.integration.java.func.AssertObjectHeaders.java Source code

Java tutorial

Introduction

Here is the source code for org.sfs.integration.java.func.AssertObjectHeaders.java

Source

/*
 * Copyright 2016 The Simple File Server Authors
 *
 * 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.
 */

package org.sfs.integration.java.func;

import io.vertx.core.MultiMap;
import io.vertx.core.http.HttpClientResponse;
import io.vertx.ext.unit.TestContext;
import rx.functions.Func1;

import static com.google.common.hash.Hashing.md5;
import static com.google.common.hash.Hashing.sha512;
import static com.google.common.io.BaseEncoding.base16;
import static com.google.common.io.BaseEncoding.base64;
import static com.google.common.net.HttpHeaders.ACCEPT_RANGES;
import static com.google.common.net.HttpHeaders.CONTENT_LENGTH;
import static com.google.common.net.HttpHeaders.CONTENT_MD5;
import static com.google.common.net.HttpHeaders.DATE;
import static com.google.common.net.HttpHeaders.ETAG;
import static com.google.common.net.HttpHeaders.LAST_MODIFIED;
import static java.lang.Boolean.parseBoolean;
import static java.lang.Long.parseLong;
import static java.lang.System.out;
import static org.sfs.util.SfsHttpHeaders.X_CONTENT_SHA512;
import static org.sfs.util.SfsHttpHeaders.X_CONTENT_VERSION;
import static org.sfs.util.SfsHttpHeaders.X_SERVER_SIDE_ENCRYPTION;
import static org.sfs.util.VertxAssert.assertEquals;
import static org.sfs.util.VertxAssert.assertNotNull;

public class AssertObjectHeaders implements Func1<HttpClientResponse, HttpClientResponse> {

    private final TestContext context;
    private final long expectedVersion;
    private final boolean serverSideEncryption;
    private final long expectedContentLength;
    private final byte[] dataMd5;
    private final byte[] dataSha512;
    private int assertIndex;

    public AssertObjectHeaders(TestContext context, byte[] data, long expectedVersion, boolean serverSideEncryption,
            long expectedContentLength, int assertIndex) {
        this(context, expectedVersion, serverSideEncryption, expectedContentLength, md5().hashBytes(data).asBytes(),
                sha512().hashBytes(data).asBytes(), assertIndex);
    }

    public AssertObjectHeaders(TestContext context, long expectedVersion, boolean serverSideEncryption,
            long expectedContentLength, byte[] dataMd5, byte[] dataSha512, int assertIndex) {
        this.context = context;
        this.expectedVersion = expectedVersion;
        this.serverSideEncryption = serverSideEncryption;
        this.expectedContentLength = expectedContentLength;
        this.dataMd5 = dataMd5;
        this.dataSha512 = dataSha512;
        this.assertIndex = assertIndex;
    }

    @Override
    public HttpClientResponse call(HttpClientResponse httpClientResponse) {
        out.println("Assert #" + assertIndex);
        MultiMap headers = httpClientResponse.headers();
        String etag = headers.get(ETAG);
        String contentMd5 = headers.get(CONTENT_MD5);
        String contentSha512 = headers.get(X_CONTENT_SHA512);
        String versionId = headers.get(X_CONTENT_VERSION);
        String contentLength = headers.get(CONTENT_LENGTH);
        String acceptRanges = headers.get(ACCEPT_RANGES);
        String lastModified = headers.get(LAST_MODIFIED);
        String date = headers.get(DATE);
        String serverSideEncryption = headers.get(X_SERVER_SIDE_ENCRYPTION);

        assertEquals(context, base16().lowerCase().encode(dataMd5), etag);
        assertEquals(context, base64().encode(dataMd5), contentMd5);
        assertEquals(context, base64().encode(dataSha512), contentSha512);
        assertEquals(context, expectedVersion, parseLong(versionId));
        //VertxAssert.assertEquals(context, expectedContentLength, Long.parseLong(contentLength));
        assertEquals(context, "none", acceptRanges);
        assertNotNull(context, lastModified);
        assertNotNull(context, date);
        assertEquals(context, this.serverSideEncryption, parseBoolean(serverSideEncryption));

        return httpClientResponse;
    }
}