Package org.eclipse.orion.server.tests.cf

Source Code of org.eclipse.orion.server.tests.cf.ManifestParserTest

/*******************************************************************************
* Copyright (c) 2014 IBM Corporation and others
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.orion.server.tests.cf;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.List;

import org.eclipse.core.runtime.FileLocator;
import org.eclipse.orion.server.cf.manifest.v2.InputLine;
import org.eclipse.orion.server.cf.manifest.v2.ManifestParseTree;
import org.eclipse.orion.server.cf.manifest.v2.Parser;
import org.eclipse.orion.server.cf.manifest.v2.ParserException;
import org.eclipse.orion.server.cf.manifest.v2.Preprocessor;
import org.eclipse.orion.server.cf.manifest.v2.Tokenizer;
import org.eclipse.orion.server.cf.manifest.v2.TokenizerException;
import org.eclipse.orion.server.cf.manifest.v2.utils.ManifestParser;
import org.eclipse.orion.server.cf.manifest.v2.utils.ManifestPreprocessor;
import org.eclipse.orion.server.cf.manifest.v2.utils.ManifestTokenizer;
import org.eclipse.orion.server.cf.manifest.v2.utils.ManifestTransformator;
import org.eclipse.orion.server.cf.manifest.v2.utils.SymbolResolver;
import org.eclipse.orion.server.tests.ServerTestsActivator;
import org.junit.Test;

public class ManifestParserTest {

  private static String CORRECT_MANIFEST_LOCATION = "testData/manifestTest/correct"; //$NON-NLS-1$
  private static String INCORRECT_MANIFEST_LOCATION = "testData/manifestTest/incorrect"; //$NON-NLS-1$
  private static String INHERITANCE_MANIFEST_LOCATION = "testData/manifestTest/inheritance"; //$NON-NLS-1$
  private static String MANIFEST_LOCATION = "testData/manifestTest"; //$NON-NLS-1$

  @Test
  public void testParserAgainsCorrectManifests() throws Exception {
    URL entry = ServerTestsActivator.getContext().getBundle().getEntry(CORRECT_MANIFEST_LOCATION);
    File manifestSource = new File(FileLocator.toFileURL(entry).getPath());

    File[] manifests = manifestSource.listFiles(new FilenameFilter() {

      public boolean accept(File dir, String name) {
        return name.toLowerCase().endsWith(".yml"); //$NON-NLS-1$
      }
    });

    for (File manifestFile : manifests) {
      InputStream inputStream = new FileInputStream(manifestFile);

      /* export the manifest and parse the output */
      String exported = exportManifest(inputStream);

      inputStream = new ByteArrayInputStream(exported.getBytes());
      String exportedOutput = exportManifest(inputStream);
      assertEquals(exported, exportedOutput);
    }
  }

  @Test
  public void testParserAgainsIncorrectManifests() throws Exception {
    URL entry = ServerTestsActivator.getContext().getBundle().getEntry(INCORRECT_MANIFEST_LOCATION);
    File manifestSource = new File(FileLocator.toFileURL(entry).getPath());

    File[] manifests = manifestSource.listFiles(new FilenameFilter() {

      public boolean accept(File dir, String name) {
        return name.toLowerCase().endsWith(".yml"); //$NON-NLS-1$
      }
    });

    boolean failure = false;
    for (File manifestFile : manifests) {
      failure = false;
      InputStream inputStream = new FileInputStream(manifestFile);

      /* export the manifest */
      try {
        exportManifest(inputStream);
      } catch (IOException ex) {
        failure = true;
      } catch (TokenizerException ex) {
        failure = true;
      } catch (ParserException ex) {
        failure = true;
      }

      assertTrue(failure);
    }
  }

  @Test
  public void testQuotedManifestProperties() throws Exception {
    String manifestName = "quotedPropertiesManifest.yml"; //$NON-NLS-1$

    URL entry = ServerTestsActivator.getContext().getBundle().getEntry(MANIFEST_LOCATION);
    File manifestFile = new File(FileLocator.toFileURL(entry).getPath().concat(manifestName));

    InputStream inputStream = new FileInputStream(manifestFile);
    ManifestParseTree manifest = parse(inputStream);

    ManifestParseTree application = manifest.get("applications").get(0); //$NON-NLS-1$
    ManifestParseTree path = application.get("path"); //$NON-NLS-1$

    assertEquals(".", path.getValue()); //$NON-NLS-1$

    ManifestParseTree host = application.get("host"); //$NON-NLS-1$
    assertEquals("quoted-path-application", host.getValue()); //$NON-NLS-1$

    ManifestParseTree domain = application.get("domain"); //$NON-NLS-1$

    assertEquals("cloud-foundry-domain.org", domain.getValue()); //$NON-NLS-1$
  }

  @Test
  public void testTargetBaseManifestProperties() throws Exception {
    String manifestName = "targetBaseManifest.yml"; //$NON-NLS-1$

    URL entry = ServerTestsActivator.getContext().getBundle().getEntry(MANIFEST_LOCATION);
    File manifestFile = new File(FileLocator.toFileURL(entry).getPath().concat(manifestName));

    InputStream inputStream = new FileInputStream(manifestFile);
    ManifestParseTree manifest = parse(inputStream);
    SymbolResolver resolver = new SymbolResolver("api.sauron.mordor.com"); //$NON-NLS-1$
    resolver.apply(manifest);

    assertEquals("api.sauron.mordor.com", manifest.get("applications").get(0).get("domain").getValue()); //$NON-NLS-1$ //$NON-NLS-2$//$NON-NLS-3$
    assertTrue(manifest.get("applications").get(0).get("url").getValue().endsWith(".api.sauron.mordor.com")); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
  }

  @Test
  public void testManifestGlobalProperties() throws Exception {
    URL entry = ServerTestsActivator.getContext().getBundle().getEntry(INHERITANCE_MANIFEST_LOCATION);

    String manifestName = "01.yml"; //$NON-NLS-1$
    File manifestFile = new File(FileLocator.toFileURL(entry).getPath().concat(manifestName));

    InputStream inputStream = new FileInputStream(manifestFile);
    ManifestParseTree manifest = parse(inputStream);

    ManifestTransformator transformator = new ManifestTransformator();
    transformator.apply(manifest);

    ManifestParseTree applications = manifest.get("applications"); //$NON-NLS-1$
    for (ManifestParseTree application : applications.getChildren())
      assertTrue(application.get("propertyA").getValue().equals("valueA") && application.get("propertyB").getValue().equals("valueB")); //$NON-NLS-1$ //$NON-NLS-2$//$NON-NLS-3$//$NON-NLS-4$

    manifestName = "02.yml"; //$NON-NLS-1$
    manifestFile = new File(FileLocator.toFileURL(entry).getPath().concat(manifestName));

    inputStream = new FileInputStream(manifestFile);
    manifest = parse(inputStream);

    transformator = new ManifestTransformator();
    transformator.apply(manifest);

    applications = manifest.get("applications"); //$NON-NLS-1$
    assertEquals("nativeA", applications.get(0).get("A").getValue()); //$NON-NLS-1$//$NON-NLS-2$
    assertEquals("nativeB", applications.get(0).get("B").getValue()); //$NON-NLS-1$//$NON-NLS-2$
    assertEquals("overriddenC", applications.get(0).get("C").getValue()); //$NON-NLS-1$//$NON-NLS-2$
    assertEquals("valueD", applications.get(0).get("D").get("overriddenD").getValue()); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$

    assertEquals("overriddenA", applications.get(1).get("A").getValue()); //$NON-NLS-1$//$NON-NLS-2$
    assertEquals("nativeB", applications.get(1).get("B").getValue()); //$NON-NLS-1$//$NON-NLS-2$
    assertEquals("nativeC", applications.get(1).get("C").getValue()); //$NON-NLS-1$//$NON-NLS-2$
    assertEquals("valueD", applications.get(1).get("D").get("overriddenD").getValue()); //$NON-NLS-1$ //$NON-NLS-2$//$NON-NLS-3$

    assertEquals("nativeA", applications.get(2).get("A").getValue()); //$NON-NLS-1$//$NON-NLS-2$
    assertEquals("overriddenB", applications.get(2).get("B").getValue()); //$NON-NLS-1$//$NON-NLS-2$
    assertEquals("nativeC", applications.get(2).get("C").getValue()); //$NON-NLS-1$//$NON-NLS-2$
    assertEquals("valueD", applications.get(2).get("D").get("overriddenD").getValue()); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$

    assertEquals("overriddenA", applications.get(3).get("A").getValue()); //$NON-NLS-1$//$NON-NLS-2$
    assertEquals("overriddenB", applications.get(3).get("B").getValue()); //$NON-NLS-1$//$NON-NLS-2$
    assertEquals("overriddenC", applications.get(3).get("C").getValue()); //$NON-NLS-1$//$NON-NLS-2$
    assertEquals("valueD", applications.get(3).get("D").get("nativeD").getValue()); //$NON-NLS-1$ //$NON-NLS-2$//$NON-NLS-3$
  }

  @Test
  public void testServicesWithSpacesManifest() throws Exception {
    String manifestName = "servicesWithSpaces.yml"; //$NON-NLS-1$

    URL entry = ServerTestsActivator.getContext().getBundle().getEntry(MANIFEST_LOCATION);
    File manifestFile = new File(FileLocator.toFileURL(entry).getPath().concat(manifestName));

    InputStream inputStream = new FileInputStream(manifestFile);
    ManifestParseTree manifest = parse(inputStream);

    ManifestParseTree application = manifest.get("applications").get(0); //$NON-NLS-1$
    ManifestParseTree services = application.get("services"); //$NON-NLS-1$

    assertEquals(2, services.getChildren().size());

    String service = services.get(0).getValue();
    assertEquals("Redis Cloud-fo service", service); //$NON-NLS-1$

    service = services.get(1).getValue();
    assertEquals("Redis-two", service); //$NON-NLS-1$
  }

  private ManifestParseTree parse(InputStream inputStream) throws IOException, TokenizerException, ParserException {
    Preprocessor preprocessor = new ManifestPreprocessor();
    List<InputLine> contents = preprocessor.process(inputStream);
    Tokenizer tokenizer = new ManifestTokenizer(contents);

    Parser parser = new ManifestParser();
    return parser.parse(tokenizer);
  }

  private String exportManifest(InputStream inputStream) throws IOException, TokenizerException, ParserException {
    return parse(inputStream).toString();
  }
}
TOP

Related Classes of org.eclipse.orion.server.tests.cf.ManifestParserTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.