com.msopentech.odatajclient.engine.it.MediaEntityTestITCase.java Source code

Java tutorial

Introduction

Here is the source code for com.msopentech.odatajclient.engine.it.MediaEntityTestITCase.java

Source

/**
 * 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 com.msopentech.odatajclient.engine.it;

import static com.msopentech.odatajclient.engine.it.AbstractTestITCase.testDefaultServiceRootURL;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

import com.msopentech.odatajclient.engine.client.http.HttpClientException;
import com.msopentech.odatajclient.engine.communication.ODataClientErrorException;
import com.msopentech.odatajclient.engine.communication.request.retrieve.ODataMediaRequest;
import com.msopentech.odatajclient.engine.communication.request.streamed.ODataMediaEntityCreateRequest;
import com.msopentech.odatajclient.engine.communication.request.streamed.ODataMediaEntityCreateRequest.MediaEntityCreateStreamManager;
import com.msopentech.odatajclient.engine.communication.request.streamed.ODataMediaEntityUpdateRequest;
import com.msopentech.odatajclient.engine.communication.request.streamed.ODataMediaEntityUpdateRequest.MediaEntityUpdateStreamManager;
import com.msopentech.odatajclient.engine.communication.request.streamed.ODataStreamUpdateRequest;
import com.msopentech.odatajclient.engine.communication.request.streamed.ODataStreamUpdateRequest.StreamUpdateStreamManager;
import com.msopentech.odatajclient.engine.communication.response.ODataMediaEntityCreateResponse;
import com.msopentech.odatajclient.engine.communication.response.ODataMediaEntityUpdateResponse;
import com.msopentech.odatajclient.engine.communication.response.ODataRetrieveResponse;
import com.msopentech.odatajclient.engine.communication.response.ODataStreamUpdateResponse;
import com.msopentech.odatajclient.engine.data.ODataEntity;
import com.msopentech.odatajclient.engine.data.ODataProperty;
import com.msopentech.odatajclient.engine.uri.URIBuilder;
import com.msopentech.odatajclient.engine.format.ODataMediaFormat;
import com.msopentech.odatajclient.engine.format.ODataPubFormat;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import org.apache.commons.io.IOUtils;
import org.junit.Test;

public class MediaEntityTestITCase extends AbstractTestITCase {

    @Test
    public void read() throws Exception {
        final URIBuilder builder = client.getURIBuilder(testDefaultServiceRootURL).appendEntityTypeSegment("Car")
                .appendKeySegment(12).appendValueSegment();

        final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaRequest(builder.build());
        retrieveReq.setFormat(ODataMediaFormat.WILDCARD);

        final ODataRetrieveResponse<InputStream> retrieveRes = retrieveReq.execute();
        assertEquals(200, retrieveRes.getStatusCode());

        final byte[] actual = new byte[Integer.parseInt(retrieveRes.getHeader("Content-Length").iterator().next())];
        IOUtils.read(retrieveRes.getBody(), actual, 0, actual.length);
    }

    @Test(expected = ODataClientErrorException.class)
    public void readWithXmlError() throws Exception {
        final URIBuilder builder = client.getURIBuilder(testDefaultServiceRootURL).appendEntityTypeSegment("Car")
                .appendKeySegment(12).appendValueSegment();

        final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaRequest(builder.build());
        retrieveReq.setFormat(ODataMediaFormat.APPLICATION_XML);

        retrieveReq.execute();
    }

    @Test(expected = ODataClientErrorException.class)
    public void readWithJsonError() throws Exception {
        final URIBuilder builder = client.getURIBuilder(testDefaultServiceRootURL).appendEntityTypeSegment("Car")
                .appendKeySegment(12).appendValueSegment();

        final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaRequest(builder.build());
        retrieveReq.setFormat(ODataMediaFormat.APPLICATION_JSON);

        retrieveReq.execute();
    }

    @Test
    public void updateMediaEntityAsAtom() throws Exception {
        updateMediaEntity(ODataPubFormat.ATOM, 14);
    }

    @Test
    public void updateMediaEntityAsJson() throws Exception {
        updateMediaEntity(ODataPubFormat.JSON, 15);
    }

    @Test
    public void createMediaEntityAsAtom() throws Exception {
        createMediaEntity(ODataPubFormat.ATOM, IOUtils.toInputStream("buffered stream sample"));
    }

    @Test
    public void createMediaEntityAsJson() throws Exception {
        createMediaEntity(ODataPubFormat.JSON, IOUtils.toInputStream("buffered stream sample"));
    }

    @Test
    public void issue137() throws Exception {
        createMediaEntity(ODataPubFormat.JSON, this.getClass().getResourceAsStream("/sample.png"));
    }

    @Test
    public void issue136() throws Exception {
        byte[] input = new byte[65000];
        for (int i = 0; i < 65000; i++) {
            input[i] = (byte) i;
        }
        createMediaEntity(ODataPubFormat.ATOM, new ByteArrayInputStream(input));
    }

    @Test(expected = HttpClientException.class)
    public void issue136FailsWithException() throws Exception {
        byte[] input = new byte[68000];
        for (int i = 0; i < 68000; i++) {
            input[i] = (byte) i;
        }
        createMediaEntity(ODataPubFormat.ATOM, new ByteArrayInputStream(input));
    }

    @Test
    public void updateNamedStream() throws Exception {
        URIBuilder builder = client.getURIBuilder(testDefaultServiceRootURL).appendEntityTypeSegment("Car")
                .appendKeySegment(16).appendStructuralSegment("Photo");

        final String TO_BE_UPDATED = "buffered stream sample";
        final InputStream input = new ByteArrayInputStream(TO_BE_UPDATED.getBytes());

        final ODataStreamUpdateRequest updateReq = client.getStreamedRequestFactory()
                .getStreamUpdateRequest(builder.build(), input);

        final StreamUpdateStreamManager streamManager = updateReq.execute();
        final ODataStreamUpdateResponse updateRes = streamManager.getResponse();
        updateRes.close();
        assertEquals(204, updateRes.getStatusCode());

        final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaRequest(builder.build());

        final ODataRetrieveResponse<InputStream> retrieveRes = retrieveReq.execute();
        assertEquals(200, retrieveRes.getStatusCode());
        assertEquals(TO_BE_UPDATED, IOUtils.toString(retrieveRes.getBody()));
    }

    private void updateMediaEntity(final ODataPubFormat format, final int id) throws Exception {
        URIBuilder builder = client.getURIBuilder(testDefaultServiceRootURL).appendEntityTypeSegment("Car")
                .appendKeySegment(id).appendValueSegment();

        final String TO_BE_UPDATED = "new buffered stream sample";
        final InputStream input = IOUtils.toInputStream(TO_BE_UPDATED);

        final ODataMediaEntityUpdateRequest updateReq = client.getStreamedRequestFactory()
                .getMediaEntityUpdateRequest(builder.build(), input);
        updateReq.setFormat(format);

        final MediaEntityUpdateStreamManager streamManager = updateReq.execute();
        final ODataMediaEntityUpdateResponse updateRes = streamManager.getResponse();
        assertEquals(204, updateRes.getStatusCode());

        builder = client.getURIBuilder(testDefaultServiceRootURL).appendEntityTypeSegment("Car")
                .appendKeySegment(id).appendValueSegment();

        final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaRequest(builder.build());

        final ODataRetrieveResponse<InputStream> retrieveRes = retrieveReq.execute();
        assertEquals(200, retrieveRes.getStatusCode());
        assertEquals(TO_BE_UPDATED, IOUtils.toString(retrieveRes.getBody()));
    }

    private void createMediaEntity(final ODataPubFormat format, final InputStream input) throws Exception {
        final URIBuilder builder = client.getURIBuilder(testDefaultServiceRootURL).appendEntitySetSegment("Car");

        final ODataMediaEntityCreateRequest createReq = client.getStreamedRequestFactory()
                .getMediaEntityCreateRequest(builder.build(), input);
        createReq.setFormat(format);

        final MediaEntityCreateStreamManager streamManager = createReq.execute();
        final ODataMediaEntityCreateResponse createRes = streamManager.getResponse();
        assertEquals(201, createRes.getStatusCode());

        final ODataEntity created = createRes.getBody();
        assertNotNull(created);
        assertEquals(2, created.getProperties().size());

        Integer id = null;
        for (ODataProperty prop : created.getProperties()) {
            if ("VIN".equals(prop.getName())) {
                id = prop.getPrimitiveValue().<Integer>toCastValue();
            }
        }
        assertNotNull(id);

        builder.appendKeySegment(id).appendValueSegment();

        final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaRequest(builder.build());

        final ODataRetrieveResponse<InputStream> retrieveRes = retrieveReq.execute();
        assertEquals(200, retrieveRes.getStatusCode());
        assertNotNull(retrieveRes.getBody());
    }
}