/*
// This software is subject to the terms of the Eclipse Public License v1.0
// Agreement, available at the following URL:
// http://www.eclipse.org/legal/epl-v10.html.
// You must accept the terms of that agreement to use this software.
//
// Copyright (C) 2002-2015 Pentaho and others
// All Rights Reserved.
*/
package mondrian.server;
import mondrian.olap.MondrianServer;
import mondrian.server.FileRepository.CatalogInfo;
import junit.framework.TestCase;
import org.olap4j.OlapConnection;
import java.util.Properties;
import static org.mockito.Mockito.doCallRealMethod;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
public class FileRepositoryTest extends TestCase {
public void testGetServerInfo_ifGetDataSourceInfoIsCalled() {
final String datasourceNameStub = "DATASOURCE_NAME";
final String datasourceInfoStub = "DATASOURCE_INFO";
final String contentStub = "<?xml version=\"1.0\""
+ " encoding=\"UTF-8\"?>\n"
+ "<DataSources>\n"
+ "<DataSource>\n"
+ "<DataSourceName>"
+ datasourceNameStub
+ "</DataSourceName>\n"
+ "<DataSourceDescription>Pentaho BI Platform Datasources</DataSourceDescription>\n"
+ "<URL>/pentaho/Xmla</URL>\n"
+ "<DataSourceInfo>"
+ datasourceInfoStub
+ "</DataSourceInfo>\n"
+ "<ProviderName>PentahoXMLA</ProviderName>\n"
+ "<ProviderType>MDP</ProviderType>\n"
+ "<AuthenticationMode>Unauthenticated</AuthenticationMode>\n"
+ "<Catalogs>\n"
+ "<Catalog name=\"SampleData\">\n"
+ "<DataSourceInfo>DataSource=SampleData;EnableXmla=false;Provider=mondrian;Datasource=\"SampleData\";overwrite=\"true\"</DataSourceInfo>\n"
+ "<Definition>mondrian:/SampleData</Definition>\n"
+ "</Catalog>\n"
+ "</Catalogs>\n"
+ "</DataSource>\n"
+ "</DataSources>\n";
FileRepository fileRepositoryMock = mock(FileRepository.class);
RepositoryContentFinder repositoryContentFinderMock =
mock(RepositoryContentFinder.class);
doReturn(repositoryContentFinderMock).when(fileRepositoryMock)
.getRepositoryContentFinder();
doReturn(contentStub).when(repositoryContentFinderMock).getContent();
doCallRealMethod().when(fileRepositoryMock).getServerInfo();
FileRepository.ServerInfo serverInfo =
fileRepositoryMock.getServerInfo();
FileRepository.DatabaseInfo databaseInfo =
serverInfo.getDatasourceMap().get(datasourceNameStub);
assertTrue(
databaseInfo.getProperties().containsValue(datasourceInfoStub));
}
public void testDiscoverDatasourceLegacyNameMatch() throws Exception {
final String contentStub =
"<?xml version=\"1.0\""
+ " encoding=\"UTF-8\"?>\n"
+ "<DataSources>\n"
+ "<DataSource>\n"
+ "<DataSourceName>Pentaho Mondrian</DataSourceName>\n"
+ "<DataSourceDescription>Pentaho BI Platform Datasources</DataSourceDescription>\n"
+ "<URL>/pentaho/Xmla</URL>\n"
+ "<DataSourceInfo>Provider=mondrian;Jdbc=SomethingAwfulWhichPeopleCantSee</DataSourceInfo>\n"
+ "<ProviderName>PentahoXMLA</ProviderName>\n"
+ "<ProviderType>MDP</ProviderType>\n"
+ "<AuthenticationMode>Unauthenticated</AuthenticationMode>\n"
+ "<Catalogs>\n"
+ "<Catalog name=\"SampleData\">\n"
+ "<DataSourceInfo>Jdbc=example.com;EnableXmla=false;Provider=mondrian;Datasource=\"SampleData\";overwrite=\"true\"</DataSourceInfo>\n"
+ "<Definition>mondrian:/SampleData</Definition>\n"
+ "</Catalog>\n"
+ "</Catalogs>\n"
+ "</DataSource>\n"
+ "</DataSources>\n";
// Mocks.
FileRepository fileRepositoryMock = mock(FileRepository.class);
RepositoryContentFinder repositoryContentFinderMock =
mock(RepositoryContentFinder.class);
// Return the content we want from the RCF.
doReturn(repositoryContentFinderMock).when(fileRepositoryMock)
.getRepositoryContentFinder();
doReturn(contentStub).when(repositoryContentFinderMock).getContent();
// Calling getServerInfo's actual implementation
doCallRealMethod().when(fileRepositoryMock).getServerInfo();
// Give it a try.
final FileRepository.ServerInfo serverInfo =
fileRepositoryMock.getServerInfo();
// Some sanity checks.
FileRepository.DatabaseInfo databaseInfo =
serverInfo.getDatasourceMap().get("Pentaho Mondrian");
assertNotNull("Database not found by name", databaseInfo);
// Moar mocks.
final Properties mockProps = mock(Properties.class);
final MondrianServer mockServer = mock(MondrianServer.class);
final String databaseName =
"Pentaho Mondrian";
final String dsInfo =
"Provider=mondrian";
final String catalogName = "SampleData";
final String roleName = null;
final CatalogInfo cInfo = databaseInfo.catalogMap.get("SampleData");
final OlapConnection oc = mock(OlapConnection.class);
// Make sure to short circuit the connection creation internal call...
doReturn(oc).when(fileRepositoryMock)
.getConnection(cInfo, mockServer, roleName, mockProps);
// We'll try to call into this method with the DS name.
doCallRealMethod().when(fileRepositoryMock)
.getConnection(
mockServer, databaseName, catalogName, roleName, mockProps);
// OK make the call.
OlapConnection ocPrime = fileRepositoryMock.getConnection(
mockServer, databaseName, catalogName, roleName, mockProps);
// Check we got a proper output.
assertTrue(ocPrime == oc);
// Make sure the protected call was made
verify(fileRepositoryMock, times(1))
.getConnection(cInfo, mockServer, roleName, mockProps);
// *** Now do the same w/ the DS Info name instead. Legacy mode.
// We'll try to call into this method with the DSInfo instead of the
// name of the database.
doCallRealMethod().when(fileRepositoryMock)
.getConnection(
mockServer, dsInfo, catalogName, roleName, mockProps);
// Make the call.
ocPrime = fileRepositoryMock.getConnection(
mockServer, dsInfo, catalogName, roleName, mockProps);
// Check we got a proper output.
assertTrue(ocPrime == oc);
// Make sure the protected call was made. 2 calls by now.
verify(fileRepositoryMock, times(2))
.getConnection(cInfo, mockServer, roleName, mockProps);
}
}
// End FileRepositoryTest.java