Package com.puppetlabs.geppetto.ruby.tests

Source Code of com.puppetlabs.geppetto.ruby.tests.PuppetTPTests

/**
* Copyright (c) 2013 Puppet Labs, Inc. and other contributors, as listed below.
* 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:
*   Puppet Labs
*/
package com.puppetlabs.geppetto.ruby.tests;

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

import java.io.File;
import java.util.List;

import com.puppetlabs.geppetto.pp.facter.Facter.Facter1_6;
import com.puppetlabs.geppetto.pp.pptp.AbstractType;
import com.puppetlabs.geppetto.pp.pptp.Function;
import com.puppetlabs.geppetto.pp.pptp.Parameter;
import com.puppetlabs.geppetto.pp.pptp.Property;
import com.puppetlabs.geppetto.pp.pptp.TargetEntry;
import com.puppetlabs.geppetto.pp.pptp.Type;
import com.puppetlabs.geppetto.pp.pptp.TypeFragment;
import com.puppetlabs.geppetto.ruby.RubyHelper;
import org.eclipse.core.runtime.Path;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.junit.Test;

public class PuppetTPTests {

  private Function getFunction(String name, TargetEntry target) {
    for(Function f : target.getFunctions())
      if(name.equals(f.getName()))
        return f;
    return null;
  }

  private Parameter getParameter(String name, Type type) {
    for(Parameter p : type.getParameters())
      if(name.equals(p.getName()))
        return p;
    return null;
  }

  /* uncomment and modify path to test load of puppet distribution and creating an xml version */

  private Property getProperty(String name, AbstractType type) {
    for(Property p : type.getProperties())
      if(name.equals(p.getName()))
        return p;
    return null;
  }

  private void performLoad(File distroDir, File pluginsDir, File tptpFile) throws Exception {
    RubyHelper helper = new RubyHelper();
    helper.setUp();
    try {
      TargetEntry target = helper.loadDistroTarget(distroDir);

      // Load the variables in the settings:: namespace
      helper.loadSettings(target);

      // Load the default meta variables (available as local in every scope).
      helper.loadMetaVariables(target);
      helper.loadPuppetVariables(target);

      for(Type t : target.getTypes())
        System.err.println("Found t: " + t.getName());
      for(Function f : target.getFunctions())
        System.err.println("Found f: " + f.getName());

      // Load (optional) any plugins
      List<TargetEntry> plugins = helper.loadPluginsTarget(pluginsDir);

      // Save the TargetEntry as a loadable resource
      ResourceSet resourceSet = new ResourceSetImpl();
      URI fileURI = URI.createFileURI(tptpFile.getAbsolutePath());
      Resource targetResource = resourceSet.createResource(fileURI);

      // Add all (optional) plugins
      targetResource.getContents().add(target);
      for(TargetEntry entry : plugins)
        targetResource.getContents().add(entry);
      targetResource.save(null);
      System.err.println("Target saved to: " + fileURI.toString());

    }
    finally {
      helper.tearDown();
    }

  }

  // Puppet PE 2.0 unzipped is not a full distribution - has no source to scan
  // public void testLoad_PE_2_0() throws Exception {
  // performLoad(new File("/Users/henrik/PuppetDistributions/puppet-enterprise-2.0.0-el-4-i386/lib/puppet"), //
  // null, //
  // new File("puppet_enterprise-2.0.0.pptp"));
  // }

  /**
   * This is a really odd place to do this, but since the other generators of pptp modesl
   * are here...
   *
   * @throws Exception
   */
  @Test
  public void testLoad_Facter1_6() throws Exception {
    File pptpFile = new File(TestDataProvider.getTestOutputDir(), "facter-1.6.pptp");
    Facter1_6 facter = new Facter1_6();

    // Save the TargetEntry as a loadable resource
    ResourceSet resourceSet = new ResourceSetImpl();
    URI fileURI = URI.createFileURI(pptpFile.getAbsolutePath());
    Resource targetResource = resourceSet.createResource(fileURI);

    // Add all (optional) plugins
    targetResource.getContents().add(facter.asPPTP());
    targetResource.save(null);
    System.err.println("Target saved to: " + fileURI.toString());

  }

  @Test
  public void testLoad2_6_9() throws Exception {
    final File puppetDistros = new File("/Users/henrik/PuppetDistributions/");
    if(puppetDistros.isDirectory()) {
      performLoad(new File(puppetDistros, "puppet-2.6.9/lib/puppet"), //
        new File(puppetDistros, "plugins-3.0.0"), //
        new File(TestDataProvider.getTestOutputDir(), "puppet-2.6.9.pptp"));

      // performLoad(new File("/Users/henrik/PuppetDistributions/puppet-2.6.9/lib/puppet"), //
      // null, //
      // new File("puppet-2.6.9.pptp"));
    }
  }

  @Test
  public void testLoad2_7_19() throws Exception {
    final File puppetDistros = new File("/Users/henrik/PuppetDistributions/");
    if(puppetDistros.isDirectory()) {
      performLoad(new File(puppetDistros, "puppet-2.7.19/lib/puppet"), //
        new File(puppetDistros, "plugins-3.0.0"), //
        new File(TestDataProvider.getTestOutputDir(), "puppet-2.7.19.pptp"));
    }
  }

  @Test
  public void testLoad3_0_0() throws Exception {
    final File puppetDistros = new File("/Users/henrik/PuppetDistributions/");
    if(puppetDistros.isDirectory()) {
      performLoad(new File(puppetDistros, "puppet-3.0.0-rc7/lib/puppet"), //
        new File(puppetDistros, "plugins-3.0.0"), //
        new File(TestDataProvider.getTestOutputDir(), "puppet-3.0.0.pptp"));
    }
  }

  @Test
  public void testLoad3_2_0() throws Exception {
    // Load puppet 3.2.0 from the puppet repo (since 3.2 RC not yet avail, load plugins from
    // the 3.0 release
    // TODO: UPDATE WHEN 3.2 is released
    //
    final File puppetDistros = new File("/Users/henrik/PuppetDistributions/");
    if(puppetDistros.isDirectory()) {
      performLoad(new File(puppetDistros, "puppet-3.2.0-rc0/lib/puppet"), //
        new File(puppetDistros, "plugins-3.0.0"), //
        new File(TestDataProvider.getTestOutputDir(), "puppet-3.2.0.pptp"));
    }
  }

  @Test
  public void testLoadEMFTP() throws Exception {
    File pptpFile = TestDataProvider.getTestFile(new Path("testData/pptp/puppet-2.6.4_0.pptp"));

    ResourceSet resourceSet = new ResourceSetImpl();
    URI fileURI = URI.createFileURI(pptpFile.getAbsolutePath());
    Resource targetResource = resourceSet.getResource(fileURI, true);
    TargetEntry target = (TargetEntry) targetResource.getContents().get(0);
    assertEquals("Should have found 46 types", 46, target.getTypes().size());
    assertEquals("Should have found 29 functions", 29, target.getFunctions().size());

    pptpFile = TestDataProvider.getTestFile(new Path("testData/pptp/puppet-2.6.4_0.pptp"));

    resourceSet = new ResourceSetImpl();
    fileURI = URI.createFileURI(pptpFile.getAbsolutePath());
    targetResource = resourceSet.getResource(fileURI, true);
    target = (TargetEntry) targetResource.getContents().get(0);
    assertEquals("Should have found 46 types", 46, target.getTypes().size());
    assertEquals("Should have found 29 functions", 29, target.getFunctions().size());
  }

  @Test
  public void testLoadMockDistro() throws Exception {
    File distroDir = TestDataProvider.getTestFile(new Path("testData/mock-puppet-distro/puppet-2.6.2_0/lib/puppet"));
    RubyHelper helper = new RubyHelper();
    helper.setUp();
    try {
      TargetEntry target = helper.loadDistroTarget(distroDir);

      // check the target itself
      assertNotNull("Should have resultet in a TargetEntry", target);
      assertEquals("Should have defined description", "Puppet Distribution", target.getDescription());
      assertEquals("Should have defined name", "puppet", target.getLabel());
      assertEquals("Should have defined version", "2.6.2_0", target.getVersion());

      // should have found one type "mocktype"
      assertEquals("Should have found one type", 1, target.getTypes().size());
      Type type = target.getTypes().get(0);
      assertEquals("Should have found 'mocktype'", "mocktype", type.getName());
      assertEquals("Should have found documentation", "<p>This is a mock type</p>", type.getDocumentation());

      assertEquals("Should have one property", 1, type.getProperties().size());
      {
        Property prop = getProperty("prop1", type);
        assertNotNull("Should have a property 'prop1", prop);
        assertEquals("Should have defined documentation", "<p>This is property1</p>", prop.getDocumentation());
      }
      {
        assertEquals("Should have one parameter", 1, type.getParameters().size());
        Parameter param = getParameter("param1", type);
        assertNotNull("Should have a parameter 'param1", param);
        assertEquals("Should have defined documentation", "<p>This is parameter1</p>", param.getDocumentation());
      }

      // There should be two type fragments, with a contribution each
      List<TypeFragment> typeFragments = target.getTypeFragments();
      assertEquals("Should have found two fragments", 2, typeFragments.size());

      TypeFragment fragment1 = typeFragments.get(0);
      TypeFragment fragment2 = typeFragments.get(1);
      boolean fragment1HasExtra1 = getProperty("extra1", fragment1) != null;
      {
        Property prop = getProperty("extra1", fragment1HasExtra1
            ? fragment1
            : fragment2);
        assertNotNull("Should have a property 'extra1", prop);
        assertEquals(
          "Should have defined documentation", "<p>An extra property called extra1</p>",
          prop.getDocumentation());
      }
      {
        Property prop = getProperty("extra2", fragment1HasExtra1
            ? fragment2
            : fragment1);
        assertNotNull("Should have a property 'extra2", prop);
        assertEquals(
          "Should have defined documentation", "<p>An extra property called extra2</p>",
          prop.getDocumentation());
      }

      // should have found two functions "echotest" and "echotest2"
      // and the log functions (8)
      assertEquals("Should have found two functions", 10, target.getFunctions().size());
      {
        Function f = getFunction("echotest", target);
        assertNotNull("Should have found function 'echotest'", f);
        assertTrue("echotest should be an rValue", f.isRValue());
      }
      {
        Function f = getFunction("echotest2", target);
        assertNotNull("Should have found function 'echotest2'", f);
        assertFalse("echotest2 should not be an rValue", f.isRValue());
      }

    }
    finally {
      helper.tearDown();
    }
  }

  // NOTE: On mac, macports changed format to a tgz file - can not load this (test has played out its role).

  /*
   * @Test
   * public void testLoadRealTP() throws Exception {
   * File distroDir = new File(
   * "/opt/local/var/macports/software/puppet/2.6.4_0/opt/local/lib/ruby/site_ruby/1.8/puppet/");
   * RubyHelper helper = new RubyHelper();
   * helper.setUp();
   * try {
   * TargetEntry target = helper.loadDistroTarget(distroDir);
   * for(Type t : target.getTypes())
   * System.err.println("Found t: " + t.getName());
   * assertEquals("Should have found 46 types", 46, target.getTypes().size());
   * for(Function f : target.getFunctions())
   * System.err.println("Found f: " + f.getName());
   * assertEquals("Should have found 29 functions", 29, target.getFunctions().size());
   *
   * // Save the TargetEntry as a loadable resource
   * ResourceSet resourceSet = new ResourceSetImpl();
   * URI fileURI = URI.createFileURI(new File("puppet-2.6.4_0.pptp").getAbsolutePath());
   * Resource targetResource = resourceSet.createResource(fileURI);
   * targetResource.getContents().add(target);
   * targetResource.save(null);
   * System.err.println("Target saved to: " + fileURI.toString());
   *
   * }
   * finally {
   * helper.tearDown();
   * }
   *
   * }
   */
TOP

Related Classes of com.puppetlabs.geppetto.ruby.tests.PuppetTPTests

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.