protected boolean test(TargetModuleID[] moduleIDs, String path) throws Exception {

    // hack for std modules

    TargetModuleID[] aTargetModuleIDs = findApplication("sayhello", ModuleType.WAR, null);

    dumpModulesIDs("war", aTargetModuleIDs);

    if (moduleIDs.length == 0) {
      // deployment failed ?
      log("Deployment failed, got zero TargetModuleID");
      System.exit(1);
    }

    // we are loading the deployed file and checking that the moduleIDs are
    // correct
    Application app = ApplicationArchivist.openArchive(new File(path));

    // check of non running modules
    ModuleType modType;
    if (app.isVirtual()) {
      modType = app.getStandaloneBundleDescriptor().getModuleType();
    } else {
      modType = ModuleType.EAR;
    }

    // now we need to start the application
    for (int i = 0; i < moduleIDs.length; i++) {
      TargetModuleID aTargetModuleID = moduleIDs[i];

      // should be part of the non running
      TargetModuleID[] targetModuleIDs =
          findApplication(aTargetModuleID.getModuleID(), modType, Boolean.FALSE);
      check(path, app, targetModuleIDs);

      // should be part of the available apps
      targetModuleIDs = findApplication(aTargetModuleID.getModuleID(), modType, null);
      check(path, app, targetModuleIDs);

      // now we start it..
      start(aTargetModuleID.getModuleID());

      // should be part of the running
      targetModuleIDs = findApplication(aTargetModuleID.getModuleID(), modType, Boolean.TRUE);
      check(path, app, targetModuleIDs);

      // should be part of the available apps
      targetModuleIDs = findApplication(aTargetModuleID.getModuleID(), modType, null);
      check(path, app, targetModuleIDs);
    }
    return true;
  }
Exemple #2
0
  /**
   * The ejb element specifies the URI of a ejb-jar, relative to the top level of the application
   * package.
   *
   * @param descriptor the Application deployment descriptor
   * @return <code>Result</code> the results for this assertion
   */
  public Result check(Application descriptor) {

    Result result = getInitializedResult();

    if (descriptor.getBundleDescriptors(EjbBundleDescriptor.class).size() > 0) {
      boolean oneFailed = false;
      for (Iterator itr = descriptor.getBundleDescriptors(EjbBundleDescriptor.class).iterator();
          itr.hasNext(); ) {
        EjbBundleDescriptor ejbd = (EjbBundleDescriptor) itr.next();

        // not sure what we can do to test this string?
        if (ejbd.getModuleDescriptor().getArchiveUri().endsWith(".jar")) {
          result.passed(
              smh.getLocalString(
                  getClass().getName() + ".passed",
                  "[ {0} ] specifies the URI [ {1} ] of an ejb-jar, relative to the top level of the application package [ {2} ].",
                  new Object[] {
                    ejbd.getName(), ejbd.getModuleDescriptor().getArchiveUri(), descriptor.getName()
                  }));
        } else {
          if (!oneFailed) {
            oneFailed = true;
          }
          result.addErrorDetails(
              smh.getLocalString(
                  getClass().getName() + ".failed",
                  "Error: [ {0} ] does not specify the URI [ {1} ] of an ejb-jar, relative to the top level of the application package [ {2} ], or does not end with \".jar\"",
                  new Object[] {
                    ejbd.getName(), ejbd.getModuleDescriptor().getArchiveUri(), descriptor.getName()
                  }));
        }
      }
      if (oneFailed) {
        result.setStatus(Result.FAILED);
      } else {
        result.setStatus(Result.PASSED);
      }
    } else {
      result.notApplicable(
          smh.getLocalString(
              getClass().getName() + ".notApplicable",
              "There are no ejb components in application [ {0} ]",
              new Object[] {descriptor.getName()}));
    }

    return result;
  }
  /**
   * write the descriptor class to a DOM tree and return it
   *
   * @param parent node for the DOM tree
   * @param nodeName the node name
   * @param application the descriptor to write
   * @return the DOM tree top node
   */
  public Node writeDescriptor(Node parent, String nodeName, Application application) {
    Node appNode = super.writeDescriptor(parent, nodeName, application);

    // web*
    for (ModuleDescriptor module : application.getModules()) {
      if (module.getModuleType().equals(DOLUtils.warType())) {
        Node web = appendChild(appNode, RuntimeTagNames.WEB);
        appendTextChild(web, RuntimeTagNames.WEB_URI, module.getArchiveUri());
        appendTextChild(web, RuntimeTagNames.CONTEXT_ROOT, module.getContextRoot());
      }
    }

    // pass-by-reference ?
    if (application.isPassByReferenceDefined()) {
      appendTextChild(
          appNode,
          RuntimeTagNames.PASS_BY_REFERENCE,
          String.valueOf(application.getPassByReference()));
    }

    // NOTE : unique-id is no longer written out to sun-ejb-jar.xml.  It is persisted via
    // domain.xml deployment context properties instead.

    // security-role-mapping*
    List<SecurityRoleMapping> roleMappings = application.getSecurityRoleMappings();
    for (int i = 0; i < roleMappings.size(); i++) {
      SecurityRoleMappingNode srmn = new SecurityRoleMappingNode();
      srmn.writeDescriptor(appNode, RuntimeTagNames.SECURITY_ROLE_MAPPING, roleMappings.get(i));
    }

    // realm?
    appendTextChild(appNode, RuntimeTagNames.REALM, application.getRealm());

    // references
    RuntimeDescriptorNode.writeCommonComponentInfo(appNode, application);
    RuntimeDescriptorNode.writeMessageDestinationInfo(appNode, application);

    // archive-name
    appendTextChild(appNode, RuntimeTagNames.ARCHIVE_NAME, application.getArchiveName());

    // compatibility
    appendTextChild(appNode, RuntimeTagNames.COMPATIBILITY, application.getCompatibility());

    // keep-state
    appendTextChild(
        appNode, RuntimeTagNames.KEEP_STATE, String.valueOf(application.getKeepState()));

    return appNode;
  }
  private boolean check(String path, Application app, TargetModuleID[] moduleIDs) {

    if (app.isVirtual()) {
      BundleDescriptor bd = app.getStandaloneBundleDescriptor();

      // standalone module, should be fast.
      if (moduleIDs.length != 1) {
        // wrong number...
        log("Error " + path + " is a standalone module, got more than 1 targetmoduleID");
        dumpModulesIDs("", moduleIDs);
        return false;
      }
    } else {
      for (int i = 0; i < moduleIDs.length; i++) {
        TargetModuleID parent = moduleIDs[i];
        Target target = parent.getTarget();
        log("Deployed on " + target.getName() + " with module ID " + parent.getModuleID());

        // now look at all the children
        TargetModuleID[] children = parent.getChildTargetModuleID();
        if (children == null) {
          log(
              "ERROR : App from "
                  + path
                  + " has "
                  + app.getBundleDescriptors().size()
                  + " modules but I didn't get any children TagetModuleID");
          return false;
        }

        // size is consistent ?
        if (children.length != app.getBundleDescriptors().size()) {
          log(
              "ERROR : App from "
                  + path
                  + " has "
                  + app.getBundleDescriptors().size()
                  + " modules but I got only "
                  + children.length
                  + " children TagetModuleID");
          return false;
        } else {
          log(
              "Expected "
                  + app.getBundleDescriptors().size()
                  + " children TargetModuleIDs and got "
                  + children.length);
        }

        for (int j = 0; j < children.length; j++) {
          TargetModuleID aChild = children[j];
          log("Processing " + aChild.getModuleID());

          String childModuleID = aChild.getModuleID();
          String[] splitted = childModuleID.split("#");
          if (splitted.length != 2) {
            log("Unknown sub module id " + childModuleID);
            return false;
          }

          // check that parent TargeTModuleID is correct
          if (aChild.getParentTargetModuleID().equals(parent)) {
            log("Child's parent TargetModuleID is correctly set");
          } else {
            log("Child's parent TargetModuleID is incorrect");
            return false;
          }

          String first = splitted[0];
          if (first.equals(parent.getModuleID())) {
            log("Correct parent module id for child " + childModuleID);
          } else {
            log("Incorrect parent module id for child " + childModuleID);
          }

          // look for the right module descriptor..
          ModuleDescriptor md = app.getModuleDescriptorByUri(splitted[1]);
          if (md == null) {
            log("Cannot find module descriptor for " + childModuleID);
            // return false;
          } else {
            log("Found module descriptor for " + childModuleID);
          }
          if (md.getModuleType().equals(ModuleType.WAR)) {
            log("Web module deployed at : " + aChild.getWebURL());
          }
        }
      }
    }
    // if we are here, it's good !
    return true;
  }
  /**
   * The alt-dd element specifies a URI to the post-assembly deployment descriptor relative to the
   * root of the application
   *
   * @param descriptor the Application deployment descriptor
   * @return <code>Result</code> the results for this assertion
   */
  public Result check(Application descriptor) {

    Result result = getInitializedResult();
    if (descriptor.getEjbBundleDescriptors().size() > 0) {
      boolean oneFailed = false;
      int na = 0;
      for (Iterator itr = descriptor.getEjbBundleDescriptors().iterator(); itr.hasNext(); ) {
        EjbBundleDescriptor ejbd = (EjbBundleDescriptor) itr.next();

        if (ejbd.getModuleDescriptor().getAlternateDescriptor() != null) {
          if (!(ejbd.getModuleDescriptor().getAlternateDescriptor().equals(""))) {
            JarFile jarFile = null;
            InputStream deploymentEntry = null;
            //                        File f = null;
            //                        if (Verifier.getEarFile() != null)
            //                            f = new File(Verifier.getEarFile());

            try {
              //                            if (f==null){
              String uri = getAbstractArchiveUri(descriptor);
              //                                try {
              FileArchive arch = new FileArchive();
              arch.open(uri);
              deploymentEntry = arch.getEntry(ejbd.getModuleDescriptor().getAlternateDescriptor());
              //                                }catch (Exception e) { }
              //                            }else{
              //
              //                                jarFile = new JarFile(f);
              //                                ZipEntry deploymentEntry1 =
              // jarFile.getEntry(ejbd.getModuleDescriptor().getAlternateDescriptor());
              //                                if (deploymentEntry1 != null){
              //                                    deploymentEntry =
              // jarFile.getInputStream(deploymentEntry1);
              //                                }
              //                            }

              if (deploymentEntry != null) {
                result.addGoodDetails(
                    smh.getLocalString(
                        getClass().getName() + ".passed",
                        "Found alternate EJB deployment descriptor URI file [ {0} ] within [ {1} ]",
                        new Object[] {
                          ejbd.getModuleDescriptor().getAlternateDescriptor(), ejbd.getName()
                        }));
              } else {
                if (!oneFailed) {
                  oneFailed = true;
                }
                result.addErrorDetails(
                    smh.getLocalString(
                        getClass().getName() + ".failed",
                        "Error: No alternate EJB deployment descriptor URI file found, looking for [ {0} ] within [ {1} ]",
                        new Object[] {
                          ejbd.getModuleDescriptor().getAlternateDescriptor(), ejbd.getName()
                        }));
              }
              // jarFile.close();

            } catch (FileNotFoundException ex) {
              Verifier.debug(ex);
              if (!oneFailed) {
                oneFailed = true;
              }

              result.failed(
                  smh.getLocalString(
                      getClass().getName() + ".failedException",
                      "Error: File not found trying to read deployment descriptor file [ {0} ] within [ {1} ]",
                      new Object[] {
                        ejbd.getModuleDescriptor().getAlternateDescriptor(), ejbd.getName()
                      }));
            } catch (IOException ex) {
              Verifier.debug(ex);
              if (!oneFailed) {
                oneFailed = true;
              }

              result.failed(
                  smh.getLocalString(
                      getClass().getName() + ".failedException1",
                      "Error: IO Error trying to read deployment descriptor file [ {0} ] within [ {1} ]",
                      new Object[] {
                        ejbd.getModuleDescriptor().getAlternateDescriptor(), ejbd.getName()
                      }));
            } finally {
              try {
                if (deploymentEntry != null) deploymentEntry.close();
              } catch (Exception x) {
              }
            }
          }
        } else {
          na++;
          result.notApplicable(
              smh.getLocalString(
                  getClass().getName() + ".notApplicable1",
                  "There is no java EJB alternative deployment descriptor in [ {0} ]",
                  new Object[] {ejbd.getName()}));
        }
      }
      if (oneFailed) {
        result.setStatus(Result.FAILED);
      } else if (na == descriptor.getEjbBundleDescriptors().size()) {
        result.setStatus(Result.NOT_APPLICABLE);
      } else {
        result.setStatus(Result.PASSED);
      }
    } else {
      result.notApplicable(
          smh.getLocalString(
              getClass().getName() + ".notApplicable",
              "There are no EJB components in application [ {0} ]",
              new Object[] {descriptor.getName()}));
    }

    return result;
  }