package com.marklogic.client.modulesloader.impl;
import com.marklogic.client.AbstractIntegrationTest;
import com.marklogic.xcc.template.XccTemplate;
import org.junit.Before;
import org.junit.Test;
import java.io.File;
import java.util.Set;
/**
* This uses the default Modules database, and it clears it out before the test starts.
*/
public class LoadModulesTest extends AbstractIntegrationTest {
private XccTemplate xccTemplate;
private DefaultModulesLoader modulesLoader;
private XccAssetLoader xccAssetLoader;
private XccStaticChecker staticChecker;
private String database = "Modules";
private File dir = new File("src/test/resources/static-check");
@Before
public void setup() {
client = newClient(database);
xccTemplate = new XccTemplate("xcc://" + clientConfig.getUsername() + ":" + clientConfig.getPassword()
+ "@" + clientConfig.getHost() + ":" + clientConfig.getPort());
xccTemplate.executeAdhocQuery("cts:uri-match('*.*') ! xdmp:document-delete(.)");
staticChecker = new XccStaticChecker(xccTemplate);
xccAssetLoader = new XccAssetLoader();
xccAssetLoader.setUsername(clientConfig.getUsername());
xccAssetLoader.setHost(clientConfig.getHost());
xccAssetLoader.setPassword(clientConfig.getPassword());
xccAssetLoader.setDatabaseName(database);
xccAssetLoader.setPort(clientConfig.getPort());
modulesLoader = new DefaultModulesLoader(xccAssetLoader);
modulesLoader.setModulesManager(null);
modulesLoader.setStaticChecker(staticChecker);
}
@Test
public void staticCheckAndDontCheckLibraryModules() {
staticChecker.setBulkCheck(false);
staticChecker.setCheckLibraryModules(false);
Set<File> files = modulesLoader.loadModules(dir, new DefaultModulesFinder(), client);
assertEquals("All 3 modules should have been loaded because we didn't static check the bad libary module",
3, files.size());
}
@Test
public void staticCheckAndCheckLibraryModules() {
staticChecker.setBulkCheck(false);
staticChecker.setCheckLibraryModules(true);
try {
modulesLoader.loadModules(dir, new DefaultModulesFinder(), client);
fail("The load should have failed because of the bad library module");
} catch (RuntimeException ex) {
System.out.println(ex.getMessage());
assertTrue(ex.getMessage().contains("in /ext/bad-lib.xqy, on line 7"));
}
}
@Test
public void staticCheckAndCheckLibraryModulesAndCatchExceptions() {
staticChecker.setBulkCheck(false);
staticChecker.setCheckLibraryModules(true);
modulesLoader.setCatchExceptions(true);
Set<File> files = modulesLoader.loadModules(dir, new DefaultModulesFinder(), client);
assertEquals("The modules should have been loaded, and error messages logged but not thrown", 3, files.size());
}
@Test
public void bulkLoadAndStaticCheck() {
staticChecker.setBulkCheck(true);
staticChecker.setCheckLibraryModules(false);
Set<File> files = modulesLoader.loadModules(dir, new DefaultModulesFinder(), client);
assertEquals("The load should have succeeded because we didn't check library modules", 3, files.size());
}
@Test
public void bulkLoadAndStaticCheckAndCheckLibraryModules() {
staticChecker.setBulkCheck(true);
staticChecker.setCheckLibraryModules(true);
try {
modulesLoader.loadModules(dir, new DefaultModulesFinder(), client);
fail("The load should have failed because of the bad library module");
} catch (Exception ex) {
assertTrue(ex.getMessage().contains("in /ext/bad-lib.xqy, on line 7"));
}
}
@Test
public void bulkLoadAndStaticCheckAndCheckLibraryModulesAndCatchExceptions() {
staticChecker.setBulkCheck(true);
staticChecker.setCheckLibraryModules(true);
modulesLoader.setCatchExceptions(true);
Set<File> files = modulesLoader.loadModules(dir, new DefaultModulesFinder(), client);
assertEquals("The modules should have been loaded, and error messages logged but not thrown", 3, files.size());
}
}