Package com.sun.jini.test.share

Source Code of com.sun.jini.test.share.LookupAttributeAdminTest

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.sun.jini.test.share;

import java.util.logging.Level;

// Test harness specific classes
import com.sun.jini.qa.harness.TestException;

// All other imports
import java.rmi.*;
import java.util.Set;
import net.jini.admin.JoinAdmin;
import net.jini.core.entry.Entry;
import com.sun.jini.qa.harness.QAConfig;
import net.jini.lookup.entry.ServiceControlled;

public class LookupAttributeAdminTest extends LookupTestBase {
    private JoinAdmin joinAdmin;
    static final private Entry[] entryarray = new Entry[0];
    private Entry[] originalState;

    public void setup(QAConfig config) throws Exception {
  super.setup(config);
  this.parse();
    }

    protected static void fill(Set aSet, Object[] aArray) {
  for (int i=0; i<aArray.length; i++)
      aSet.add(aArray[i]);
    }

    protected void checkAttributes(Set attributes, String op)
  throws RemoteException, TestException
    {
  Entry[] fromService = joinAdmin.getLookupAttributes();
  Entry[] shouldBe = (Entry[])attributes.toArray(entryarray);
  if (!arraysEqual(shouldBe, fromService)) {
      logger.log(Level.INFO, op + " did not work");
      logger.log(Level.INFO, "Should have:\n\t");
      dumpArray(shouldBe, "\n\t");
      logger.log(Level.INFO, "has:\n\t");
      dumpArray(fromService, "\n\t");
      throw new TestException(op + " did not work");
  }
    }

    public void run() throws Exception {
  init();
  joinAdmin = (JoinAdmin)admin;

  if (!noCleanup) {
      try {
    originalState = joinAdmin.getLookupAttributes();
      } catch (Throwable t) {
    setupFailure(
        "Could not get inital state for future restoration", t);
      }
  }

  Set attributes = new java.util.HashSet();

  // Add

  // get the state
  fill(attributes, joinAdmin.getLookupAttributes());

  Entry aEntry = new AttrOne("LOOP");
  attributes.add(aEntry);
  joinAdmin.addLookupAttributes(new Entry[]{aEntry});
  checkAttributes(attributes, "Add");

  Entry entry2 = new AttrTwo(4);
  Entry entry3 = new SunOfAttrOne("AIU", 5);
  Entry entry4 = new AttrTwo(6);
  Entry entry5 = new SunOfAttrOne("Cool RTI", 7);
  attributes.add(entry2);
  attributes.add(entry3);
  attributes.add(entry4);
  attributes.add(entry5);
  joinAdmin.addLookupAttributes(
      new Entry[]{aEntry, entry2, entry3,  entry4,  entry5});
  checkAttributes(attributes, "Add 2");

  attributes.remove(entry2);
  attributes.remove(entry4);
  ((AttrOne)entry3).aString = "OPSIN";

  Entry[] templates = new Entry[]{
      new AttrTwo(),
      entry5,
      new AttrOne("AIU")
  };
  Entry[] val = new Entry[]{
      null,
      new SunOfAttrOne("Cool but unappreciated RTI", 7),
      new AttrOne("OPSIN")
  };

  joinAdmin.modifyLookupAttributes(templates, val);
  ((AttrOne)entry5).aString = "Cool but unappreciated RTI";
  checkAttributes(attributes, "Modify");

  if (tryShutdown) {
      shutdown();

      if (activatable) {
    logger.log(Level.INFO, "Checking attributes");
    checkAttributes(attributes, "Restart");
      } else {
    try {
        joinAdmin.getLookupAttributes();
        throw new TestException("Sevice did not go away");
    } catch (RemoteException e) {
        // This is what we are looking for
    }
      }
  }
    }

    /** Performs cleanup actions necessary to achieve a graceful exit of
     *  the current QA test.
     *  @exception TestException will usually indicate an "unresolved"
     *  condition because at this point the test has completed.
     */
    public void tearDown() {
  if (!noCleanup) {
      try {
    JoinAdmin joinAdmin = (JoinAdmin)admin;

    // In case something from the orginal state got removed
    int nonCtrlCount = 0;
    for (int i=0; i<originalState.length; i++)
        if (!(originalState[i] instanceof ServiceControlled))
      nonCtrlCount++;

    Entry[] subState = new Entry[nonCtrlCount];
    int s = 0; // Index into substate
    for (int i=0; i<originalState.length; i++)
        if (!(originalState[i] instanceof ServiceControlled))
      subState[s++] = originalState[i];
    // Add is idempotent, so even if was still there
    // adding it again won't hurt
    joinAdmin.addLookupAttributes(subState);


    Entry[] curAttrs = joinAdmin.getLookupAttributes();
    int numToRemove = curAttrs.length - originalState.length;

    if (numToRemove > 0) {
        Entry[] templates = new Entry[numToRemove];
        // These are all null
        Entry[] newAttrs = new Entry[numToRemove];

        int t = 0; // index into templates
        // For each attribute in curAttrs, but not in
        // originalState stick it into template
        for (int i=0; i<curAttrs.length; i++) {
      boolean match = false;
      for (int j=0; j<originalState.length; j++) {
          if (curAttrs[i].equals(originalState[j])) {
        match = true;
        break;
          }
      }

      if (!match)
          // Must not have been in original state
          templates[t++] = curAttrs[i];
        }
        joinAdmin.modifyLookupAttributes(templates, newAttrs);
    }
      } catch (Throwable t) {
    try {
        cleanupFailure("Could not restore inital state", t);
    } catch (Exception ex) {
        String message = "Warning: Test LookupLocatorAdminTest did not shutdown " +
        "cleanly!\n" + "Reason: " + ex.getMessage();
        logger.log(Level.INFO, message);
        ex.printStackTrace();
    }
      }
  }
  super.tearDown();
    }

    /**
     * Return an array of String whose elements comprise the
     * categories to which this test belongs.
     */
    public String[] getCategories() {
  return new String[] { "admin" };
    }

    /**
     * Return a String which describes this test
     */
    public String getDescription() {
  return "Test Name = LookupAttributeAdminTest : \n" +
    "Test tests different operations with attributes.";
    }

}


TOP

Related Classes of com.sun.jini.test.share.LookupAttributeAdminTest

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.