package com.occamlab.te.web; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.File; import java.io.IOException; import java.net.URISyntaxException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.junit.Before; import org.junit.Test; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; public class ConfigFileCreatorTest { private File classp; private DocumentBuilder builder; @Before public void createDocBuilder() throws ParserConfigurationException, URISyntaxException { this.classp = new File(getClass().getResource("/").toURI()); DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); builder = documentBuilderFactory.newDocumentBuilder(); } @Test public void testMultipleTestsUnderTEBASE() throws URISyntaxException { File tebase = new File(classp, "tebase"); ConfigFileCreator configFileCreator = new ConfigFileCreator(); configFileCreator.create(tebase); File configFile = new File(tebase, "config.xml"); try { Document config = builder.parse(configFile); Node node = XMLUtils.getFirstNode(config, "/config/scripts/organization[child::name/text()='OGC']/standard[child::name/text()='Catalogue Service - Web (CSW)']/" + "version[child::name/text()='3.0.0']/suite/namespace-uri"); assertTrue("The config file of a test (e.g. CAT 3.0) was copied deepely", node.getTextContent().equals("http://www.opengis.net/cite/cat30")); NodeList orgs = XMLUtils.getAllNodes(config, "/config/scripts/organization"); assertEquals("Expected 1 organization", 1, orgs.getLength()); String xpath = "/config/scripts/organization[child::name/text()='OGC']/standard[child::name/text()='Catalogue Service - Web (CSW)']/version"; NodeList vers = XMLUtils.getAllNodes(config, xpath); assertEquals("Expected 2 CSW standards", 2, vers.getLength()); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } @Test public void testParsingMultipleOranizations() { try { File tebase = new File(classp, "tebase-multiple-organizations"); ConfigFileCreator configFileCreator = new ConfigFileCreator(); configFileCreator.create(tebase); File configFile = new File(tebase + File.separator + "config.xml"); Document config = builder.parse(configFile); NodeList orgs = XMLUtils.getAllNodes(config, "/config/scripts/organization"); assertEquals(2, orgs.getLength()); configFile.delete(); } catch (Exception e) { fail(); e.printStackTrace(); } } @Test public void testParsingFoldersWithHiddenFiles() { try { File tebase = new File(classp, "tebase-hidden-files"); ConfigFileCreator configFileCreator = new ConfigFileCreator(); configFileCreator.create(tebase); File configFile = new File(tebase + File.separator + "config.xml"); Document config = builder.parse(configFile); NodeList orgs = XMLUtils.getAllNodes(config, "/config/scripts/organization"); assertEquals(2, orgs.getLength()); configFile.delete(); } catch (Exception e) { fail(); e.printStackTrace(); } } @Test public void testSingleTestTEBASEwithNoConfigFileInATest() { try { File tebase = new File(classp, "tebase-no-config-in-test"); ConfigFileCreator configFileCreator = new ConfigFileCreator(); configFileCreator.create(tebase); File configFile = new File(tebase + File.separator + "config.xml"); Document config = builder.parse(configFile); NodeList orgs = XMLUtils.getAllNodes(config, "/config/scripts/organization"); assertEquals(0, orgs.getLength()); configFile.delete(); } catch (Exception e) { fail(); e.printStackTrace(); } } @Test public void testSingleTestTEBASEwithScriptsEmpty() { try { File tebase = new File(classp, "tebase-empty"); ConfigFileCreator configFileCreator = new ConfigFileCreator(); configFileCreator.create(tebase); File configFile = new File(tebase + File.separator + "config.xml"); Document config = builder.parse(configFile); NodeList orgs = XMLUtils.getAllNodes(config, "/config/scripts/organization"); assertEquals(0, orgs.getLength()); configFile.delete(); } catch (Exception e) { fail(); e.printStackTrace(); } } @Test public void testTEBASEnotfound() { File tebase = new File(classp, "xyzzxsyss"); ConfigFileCreator configFileCreator = new ConfigFileCreator(); try { configFileCreator.create(tebase); } catch (TEException e) { assertEquals("com.occamlab.te.web.TEBaseNotFoundException", e.getClass().getName()); return; } fail("it should throw aTEBaseNotFoundException Exception"); } /** * Tests to properly parsed when multiple versions of a test exist. for * example SFS 1.2,1.2,1.3 etc, and they are all under SFS directory. */ @Test public void testMultipleVersionsOfATest() { try { File tebase = new File(classp, "tebase-multiple-versions-of-a-test"); ConfigFileCreator configFileCreator = new ConfigFileCreator(); configFileCreator.create(tebase); File configFile = new File(tebase + File.separator + "config.xml"); Document config = builder.parse(configFile); NodeList numberOfTests = XMLUtils.getAllNodes(config, "/config/scripts/organization/standard/version"); assertEquals(3, numberOfTests.getLength()); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }