com.streamreduce.core.model.ConnectionTest.java Source code

Java tutorial

Introduction

Here is the source code for com.streamreduce.core.model.ConnectionTest.java

Source

/*
 * Copyright 2012 Nodeable Inc
 *
 *    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 com.streamreduce.core.model;

import com.streamreduce.connections.AuthType;
import com.streamreduce.connections.ConnectionProvidersForTests;
import com.streamreduce.test.service.TestUtils;
import com.streamreduce.util.JSONObjectBuilder;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.commons.lang.RandomStringUtils;
import org.bson.types.ObjectId;
import org.junit.Assert;
import org.junit.Test;

import static com.streamreduce.connections.AuthType.OAUTH;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

public class ConnectionTest {

    @Test
    public void testBuilderIncludesAuthType() {
        //Unit test to make sure Connection.Builder properly includes authtype in the
        //Connection object.
        Connection c = new Connection.Builder()
                .alias("test github").description("test github").visibility(SobaObject.Visibility.PUBLIC)
                .provider(ConnectionProvidersForTests.GITHUB_PROVIDER).user(new User.Builder().username("maynard")
                        .account(new Account.Builder().name("Tool").build()).build())
                .authType(OAUTH).url("http://someUrl").build();
        assertTrue(c.getAuthType() == OAUTH);
    }

    @Test(expected = IllegalStateException.class)
    public void testBuilderWhenAuthTypeNotSpecified() {
        //Unit test to make sure Connection.Builder.build() throws IllegalStateException when authType isn't specified.
        new Connection.Builder().alias("test github").description("test github")
                .visibility(SobaObject.Visibility.PUBLIC).provider(ConnectionProvidersForTests.GITHUB_PROVIDER)
                .user(new User.Builder().username("maynard").account(new Account.Builder().name("Tool").build())
                        .build())
                .url("http://someUrl").build();
    }

    @Test
    public void testBuilderTrimsUrl() {
        //Ensures that a Connection created from a Builder has a trimmed url.
        Connection c = new Connection.Builder()
                .alias("test github").description("test github").visibility(SobaObject.Visibility.PUBLIC)
                .provider(ConnectionProvidersForTests.GITHUB_PROVIDER).user(new User.Builder().username("maynard")
                        .account(new Account.Builder().name("Tool").build()).build())
                .authType(OAUTH).url("  http://someUrl  ").build();
        assertEquals("http://someUrl", c.getUrl());
    }

    @Test
    public void testCreateBuilderFromJson() {
        User u = new User.Builder().username("maynard").account(new Account.Builder().name("Tool").build()).build();
        u.setId(new ObjectId());

        Connection expected = new Connection.Builder().alias("test github").description("test github")
                .visibility(SobaObject.Visibility.PUBLIC).provider(ConnectionProvidersForTests.GITHUB_PROVIDER)
                .user(u).credentials(new ConnectionCredentials("user", "password")).url("http://someUrl")
                .authType(AuthType.USERNAME_PASSWORD).build();

        JSONObject json = new JSONObject();
        json.put("alias", expected.getAlias());
        json.put("description", expected.getDescription());
        json.put("visibility", expected.getVisibility());
        json.put("providerId", expected.getProviderId());
        json.put("type", expected.getType());
        json.put("user", u.getId());
        json.put("account", u.getAccount().getId());
        JSONObject credentials = new JSONObject();
        credentials.put("identity", expected.getCredentials().getIdentity());
        credentials.put("credential", expected.getCredentials().getCredential());
        json.put("credentials", credentials);
        json.put("url", expected.getUrl());
        json.put("authType", expected.getAuthType().toString());
        json.put("hashtags", JSONArray.fromObject(expected.getHashtags()));

        Connection actual = new Connection.Builder(json).user(u) //this is cheating, but user usually comes from SecurityService
                .build();

        assertEquals(expected, actual);
    }

    @Test
    public void testEquals() {
        User u = new User.Builder().username("maynard").account(new Account.Builder().name("Tool").build()).build();
        u.setId(new ObjectId());

        Connection expected = new Connection.Builder().alias("test github").description("test github")
                .visibility(SobaObject.Visibility.PUBLIC).provider(ConnectionProvidersForTests.GITHUB_PROVIDER)
                .user(u).credentials(new ConnectionCredentials("user", "password")).url("http://someUrl")
                .authType(AuthType.USERNAME_PASSWORD).build();

        Connection actual = new Connection.Builder().alias("test github").description("test github")
                .visibility(SobaObject.Visibility.PUBLIC).provider(ConnectionProvidersForTests.GITHUB_PROVIDER)
                .user(u).credentials(new ConnectionCredentials("user", "password")).url("http://someUrl")
                .authType(AuthType.USERNAME_PASSWORD).build();

        assertEquals(expected, actual);
    }

    @Test
    public void testHashCode() {
        User u = new User.Builder().username("maynard").account(new Account.Builder().name("Tool").build()).build();
        u.setId(new ObjectId());

        Connection expected = new Connection.Builder().alias("test github").description("test github")
                .visibility(SobaObject.Visibility.PUBLIC).provider(ConnectionProvidersForTests.GITHUB_PROVIDER)
                .user(u).credentials(new ConnectionCredentials("user", "password")).url("http://someUrl")
                .authType(AuthType.USERNAME_PASSWORD).build();
        Connection actual = new Connection.Builder().alias("test github").description("test github")
                .visibility(SobaObject.Visibility.PUBLIC).provider(ConnectionProvidersForTests.GITHUB_PROVIDER)
                .user(u).credentials(new ConnectionCredentials("user", "password")).url("http://someUrl")
                .authType(AuthType.USERNAME_PASSWORD).build();

        assertEquals(expected.hashCode(), actual.hashCode());
    }

    @Test
    public void testConnectionHasNoOutboundConnectionsByDefault() {
        Connection c = new Connection.Builder()
                .alias("test github").description("test github").visibility(SobaObject.Visibility.PUBLIC)
                .provider(ConnectionProvidersForTests.GITHUB_PROVIDER).user(new User.Builder().username("maynard")
                        .account(new Account.Builder().name("Tool").build()).build())
                .url("http://someUrl").authType(AuthType.NONE).build();

        assertEquals(0, c.getOutboundConfigurations().size());
    }

    @Test
    public void testConnectionBuilderWithOneOutboundConnection() {
        User testUser = new User.Builder().username("maynard").account(new Account.Builder().name("Tool").build())
                .build();

        Connection c = new Connection.Builder().alias("test github").description("test github")
                .visibility(SobaObject.Visibility.PUBLIC).provider(ConnectionProvidersForTests.GITHUB_PROVIDER)
                .user(testUser).url("http://someUrl").authType(AuthType.NONE)
                .outboundConfigurations(
                        new OutboundConfiguration.Builder().credentials(new ConnectionCredentials("user", "pass"))
                                .destination("s3").protocol("my.bucket.name").namespace("key/prefix/here/")
                                .dataTypes(OutboundDataType.PROCESSED).build())
                .build();

        assertEquals(1, c.getOutboundConfigurations().size());
    }

    @Test
    public void testConnectionBuilderSetsInboundConnectionReferenceOnOutboundConnection() {
        User testUser = new User.Builder().username("maynard").account(new Account.Builder().name("Tool").build())
                .build();

        OutboundConfiguration outboundConfiguration = new OutboundConfiguration.Builder()
                .credentials(new ConnectionCredentials("accessKey", "secretKey")).destination("s3")
                .protocol("my.bucket.name").namespace("key/prefix/here/").dataTypes(OutboundDataType.PROCESSED)
                .build();

        Connection c = new Connection.Builder().alias("test github").description("test github")
                .visibility(SobaObject.Visibility.PUBLIC).provider(ConnectionProvidersForTests.GITHUB_PROVIDER)
                .user(testUser).url("http://someUrl").authType(AuthType.NONE)
                .outboundConfigurations(outboundConfiguration).build();

        assertEquals(c, outboundConfiguration.getOriginatingConnection());
    }

    @Test
    public void testConnectionMergeWithJson_CopiesAllConnectionCredentialFields() {
        String expectedIdentity = RandomStringUtils.randomAlphanumeric(10);
        String expectedCredential = RandomStringUtils.randomAlphanumeric(10);
        String expectedApiKey = RandomStringUtils.randomAlphanumeric(10);
        String expectedOAuthToken = RandomStringUtils.randomAlphanumeric(10);
        String expectedOAuthTokenSecret = RandomStringUtils.randomAlphanumeric(10);

        Connection connection = TestUtils.createCloudConnection();
        JSONObject jsonObject = new JSONObjectBuilder().add("credentials",
                new JSONObjectBuilder().add("identity", expectedIdentity).add("credential", expectedCredential)
                        .add("api_key", expectedApiKey).add("oauthToken", expectedOAuthToken)
                        .add("oauthTokenSecret", expectedOAuthTokenSecret).build())
                .build();

        connection.mergeWithJSON(jsonObject);

        ConnectionCredentials mergedCredentials = connection.getCredentials();
        Assert.assertEquals(expectedIdentity, mergedCredentials.getIdentity());
        Assert.assertEquals(expectedCredential, mergedCredentials.getCredential());
        Assert.assertEquals(expectedApiKey, mergedCredentials.getApiKey());
        Assert.assertEquals(expectedOAuthToken, mergedCredentials.getOauthToken());
        Assert.assertEquals(expectedOAuthTokenSecret, mergedCredentials.getOauthTokenSecret());
    }

}