/*
* 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.hamcrest.core.IsInstanceOf.instanceOf;
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.LocalJcrDriver;
public class LocalRepositoryDelegateTest 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 JNDINAME = "jcr/local";
private static final String VALID_JNDI_URL = LocalJcrDriver.JNDI_URL_PREFIX + JNDINAME;
private static final String INSUFFICIENT_JNDI_URL = LocalJcrDriver.JNDI_URL_PREFIX + "/";
private static final String VALID_JNDI_URL_WITH_PARMS = VALID_JNDI_URL + "?workspace=" + WORKSPACE + "&user=" + USER_NAME
+ "&password=" + PASSWORD + "&"
+ LocalJcrDriver.REPOSITORY_PROPERTY_NAME + "=" + REPOSITORY_NAME;
private RepositoryDelegate delegate;
@Test
public void testNoContextOverride() throws SQLException {
delegate = factory().createRepositoryDelegate(VALID_JNDI_URL_WITH_PARMS, new Properties(), null);
}
@Test
public void shouldCreateLocalRepositoryDelegate() throws SQLException {
RepositoryDelegate delegate = factory().createRepositoryDelegate(VALID_JNDI_URL_WITH_PARMS, new Properties(), null);
assertThat(delegate, instanceOf(LocalRepositoryDelegate.class));
}
@Test
public void shouldAcceptValidURL() {
assertThat(factory().acceptUrl(VALID_JNDI_URL_WITH_PARMS), is(true));
assertThat(factory().acceptUrl(VALID_JNDI_URL), is(true));
}
@Test
public void connectionInfoShouldBeValid() throws SQLException {
delegate = factory().createRepositoryDelegate(VALID_JNDI_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().getWorkspaceName(), is(WORKSPACE));
assertThat(delegate.getConnectionInfo().getRepositoryName(), is(REPOSITORY_NAME));
assertThat(delegate.getConnectionInfo().getEffectiveUrl(),
is(LocalJcrDriver.JNDI_URL_PREFIX
+ "jcr/local?user=jsmith&workspace=MyWorkspace&password=******&repositoryName=repositoryName"));
DriverPropertyInfo[] infos = delegate.getConnectionInfo().getPropertyInfos();
assertThat(infos.length, is(0));
assertThat(((LocalRepositoryDelegate.JNDIConnectionInfo)delegate.getConnectionInfo()).getRepositoryPath(), is(JNDINAME));
// System.out.println("URL: " delegate.getConnectionInfo().getUrl());
}
@Test
public void connectionPropertyInfoShouldIndicateMissingData() throws SQLException {
delegate = factory().createRepositoryDelegate(INSUFFICIENT_JNDI_URL, new Properties(), null);
assertNotNull(delegate.getConnectionInfo());
DriverPropertyInfo[] infos = delegate.getConnectionInfo().getPropertyInfos();
assertThat(infos.length, is(4));
}
@Test
public void shouldReturnEmptyPropertyInfosWhenSuppliedValidUrlAndAllPropertiesWithRepositoriesInJndi() throws SQLException {
Properties validProperties = new Properties();
validProperties.put(LocalJcrDriver.WORKSPACE_PROPERTY_NAME, WORKSPACE);
validProperties.put(LocalJcrDriver.USERNAME_PROPERTY_NAME, USER_NAME);
validProperties.put(LocalJcrDriver.PASSWORD_PROPERTY_NAME, PASSWORD);
validProperties.put(LocalJcrDriver.REPOSITORY_PROPERTY_NAME, REPOSITORY_NAME);
delegate = factory().createRepositoryDelegate(VALID_JNDI_URL, validProperties, null);
DriverPropertyInfo[] infos = delegate.getConnectionInfo().getPropertyInfos();
assertThat(infos.length, is(0));
}
}