/*
* ModeShape (http://www.modeshape.org)
*
* 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.modeshape.jdbc.delegate;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import java.sql.DriverPropertyInfo;
import java.sql.SQLException;
import java.util.Properties;
import org.junit.Test;
import org.modeshape.jdbc.JcrDriver;
/**
*
*/
public class HttpRepositoryDelegateTest extends RepositoryDelegateFactoryTest {
private static final String REPOSITORY_NAME = "repositoryName";
private static final String USER_NAME = "jsmith";
private static final String PASSWORD = "secret";
private static final String WORKSPACE = "MyWorkspace";
private static final String SERVER = "serverName:8080";
private static final String INVALID_URL = JcrDriver.HTTP_URL_PREFIX + SERVER;
private static final String VALID_HTTP_URL = JcrDriver.HTTP_URL_PREFIX + SERVER + "/modeshape-rest";
private static final String VALID_HTTP_URL_WITH_PARMS = VALID_HTTP_URL + "/" + REPOSITORY_NAME + "/" + WORKSPACE + "?user="
+ USER_NAME + "&password=" + PASSWORD + "&"
+ JcrDriver.TEIID_SUPPORT_PROPERTY_NAME + "=true";
private RepositoryDelegate delegate;
/**
* {@inheritDoc}
*
* @see org.modeshape.jdbc.delegate.RepositoryDelegateFactoryTest#factory()
*/
@Override
protected RepositoryDelegateFactory factory() {
return HttpRepositoryDelegate.FACTORY;
}
@Test
public void testNoContextOverride() throws SQLException {
delegate = factory().createRepositoryDelegate(VALID_HTTP_URL_WITH_PARMS, new Properties(), null);
}
@Test
public void connectionInfoShouldBeValid() throws SQLException {
delegate = factory().createRepositoryDelegate(VALID_HTTP_URL_WITH_PARMS, new Properties(), null);
assertNotNull(delegate.getConnectionInfo());
assertThat(delegate.getConnectionInfo().getUsername(), is(USER_NAME));
assertThat(delegate.getConnectionInfo().getPassword(), is(new String(PASSWORD).toCharArray()));
assertThat(delegate.getConnectionInfo().getEffectiveUrl(),
is(VALID_HTTP_URL
+ "?teiidsupport=true&user=jsmith&workspace=MyWorkspace&password=******&repositoryName=repositoryName"));
assertThat(delegate.getConnectionInfo().isTeiidSupport(), is(Boolean.TRUE.booleanValue()));
DriverPropertyInfo[] infos = delegate.getConnectionInfo().getPropertyInfos();
assertThat(infos.length, is(0));
assertThat((delegate.getConnectionInfo()).getRepositoryPath(), is(SERVER + "/modeshape-rest"));
// System.out.println("URL: " + delegate.getConnectionInfo().getUrl());
}
@Test
public void connectionPropertyInfoShouldIndicateMissingData() throws SQLException {
delegate = factory().createRepositoryDelegate(INVALID_URL, new Properties(), null);
assertNotNull(delegate.getConnectionInfo());
DriverPropertyInfo[] infos = delegate.getConnectionInfo().getPropertyInfos();
assertThat(infos.length, is(5));
}
@Test
public void shouldReturnEmptyPropertyInfosWhenSuppliedValidUrlAndAllPropertiesWithRepositoriesInHTTP() throws SQLException {
Properties validProperties = new Properties();
validProperties.put(JcrDriver.WORKSPACE_PROPERTY_NAME, WORKSPACE);
validProperties.put(JcrDriver.USERNAME_PROPERTY_NAME, USER_NAME);
validProperties.put(JcrDriver.PASSWORD_PROPERTY_NAME, PASSWORD);
validProperties.put(JcrDriver.REPOSITORY_PROPERTY_NAME, REPOSITORY_NAME);
delegate = factory().createRepositoryDelegate(VALID_HTTP_URL, validProperties, null);
DriverPropertyInfo[] infos = delegate.getConnectionInfo().getPropertyInfos();
assertThat(infos.length, is(0));
}
}