/* * 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()); } }