Package org.jgroups.tests

Source Code of org.jgroups.tests.ProtocolConfigurationTest$ConfigurableObject

package org.jgroups.tests;

import org.jgroups.Event;
import org.jgroups.Global;
import org.jgroups.conf.ProtocolConfiguration;
import org.jgroups.util.StackType;
import org.jgroups.annotations.Property;
import org.jgroups.conf.PropertyConverters;
import org.jgroups.stack.Configurator;
import org.jgroups.stack.IpAddress;
import org.jgroups.stack.Protocol;
import org.jgroups.stack.ProtocolStack;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import java.net.InetAddress;
import java.util.LinkedList;
import java.util.List;
import java.util.Vector;

/**
* Tests the use of @Property dependency processing and default assignment.
* @author Richard Achmatowicz
*/
@Test(groups=Global.FUNCTIONAL,sequential=true)
public class ProtocolConfigurationTest {
  ProtocolStack stack = null;
  Protocol protocol = null ;
  static final String orderProps="org.jgroups.tests.ProtocolConfigurationTest$ORDERING(a=1;b=2;c=3)";
  static final String refsProps="org.jgroups.tests.ProtocolConfigurationTest$REFS(a=1;b=2;c=3)";
  static final String defaultProps="org.jgroups.tests.ProtocolConfigurationTest$DEFAULTS(b=333)";
  static final String addressProps="org.jgroups.tests.ProtocolConfigurationTest$INETADDRESSES(" +
                  "inetAddressField=127.0.0.1;inet_address_method=192.168.0.100;" +
                  "ipAddressListField=127.0.0.1[8080],127.0.0.1[8081];" +
                  "ip_address_list_method=192.168.0.100[5678],192.168.0.101[2345];port_range=1)" ;
  static final String configurableObjectsProps="org.jgroups.tests.ProtocolConfigurationTest$CONFIGOBJPROTOCOL(" +
                                  "config_object_class=org.jgroups.tests.ProtocolConfigurationTest$ConfigurableObject;" +
                                  "string_property=test)" ;
           
  List<String> order = new LinkedList<String>() ;

  @BeforeMethod
  void setUp() {
    stack=new ProtocolStack();
  }

  /*
   * Checks that missing dependencies are flagged
   */
  @Test(expectedExceptions=IllegalArgumentException.class)
  public void testResolutionOfDependencies() throws Exception {
   
    // create the layer described by REFS
    try {
      protocol = Configurator.createProtocol(refsProps, stack) ;
    }
    catch(IllegalArgumentException e) {
      System.out.println("exception thrown (expected): " + e.getMessage());
      // rethrow to make sure testNG does not fail the test
      throw e ;
    }
  }
 
  /*
   * Checks that dependency ordering works
   */
  public void testDependencyOrdering() throws Exception {
    // create a List describing correct Property ordering
    List<String> correctOrder = new LinkedList<String>() ;
    correctOrder.add("c") ;
    correctOrder.add("b") ;
    correctOrder.add("a") ;

    // create the layer described by ORDERING
    protocol = Configurator.createProtocol(orderProps, stack) ;
   
    // check that the list elements are in the right order
    List<String> actualOrder = ((ORDERING)protocol).getList() ;
   
    assert actualOrder.equals(correctOrder) ;
  }

  /*
   * Checks assignment of defaults
   */
  public void testDefaultAssignment() throws Exception {

    Vector<ProtocolConfiguration> protocol_configs = new Vector<ProtocolConfiguration>() ;
    Vector<Protocol> protocols = new Vector<Protocol>() ;
   
    // create the layer described by DEFAULTS
    protocol = Configurator.createProtocol(defaultProps, stack) ;
    // process the defaults
    protocol_configs.add(new ProtocolConfiguration(defaultProps)) ;
    protocols.add(protocol) ;
    Configurator.setDefaultValues(protocol_configs, protocols, StackType.IPv4) ;
   
    // get the value which should have been assigned a default
    int a = ((DEFAULTS)protocol).getA() ;
    System.out.println("value of a = " + a) ;
   
    // get the value which should not have been assigned a default
    int b = ((DEFAULTS)protocol).getB() ;
    System.out.println("value of b = " + b) ;
   
    // assert b == 333 ;
    if (b != 333) {
      throw new RuntimeException("default property value set when it should not have been") ;
    }
   
    // get the value which should not have been assigned a default
    InetAddress c = ((DEFAULTS)protocol).getC() ;
    System.out.println("value of c = " + c) ;
        assert c != null;
  }
  /*
   * Checks InetAddress and IpAddress processing
   */
  public void testAssignmentInetAddresses() throws Exception {

    Vector<ProtocolConfiguration> protocol_configs = new Vector<ProtocolConfiguration>() ;
    Vector<Protocol> protocols = new Vector<Protocol>() ;
   
    // create the layer described by INETADDRESSES
    protocol = Configurator.createProtocol(addressProps, stack) ;
       
    // get the value which should have been assigned a default
    InetAddress a = ((INETADDRESSES)protocol).getInetAddressField() ;
    System.out.println("value of inetAddressField = " + a) ;
   
    // get the value which should not have been assigned a default
    InetAddress b = ((INETADDRESSES)protocol).getInetAddressMethod() ;
    System.out.println("value of inetAddressMethod = " + b) ;
   
    // get the value which should have been assigned a default
    List<IpAddress> c = ((INETADDRESSES)protocol).getIpAddressListField() ;
    System.out.println("value of ipAddressListField = " + c) ;
   
    // get the value which should not have been assigned a default
    List<IpAddress> d = ((INETADDRESSES)protocol).getIpAddressListMethod() ;
    System.out.println("value of ipAddressListMethod = " + d) ;

  }
 
  /*
   * Checks InetAddress and IpAddress processing
   */
  public void testConfigurableObject() throws Exception {

    Vector<ProtocolConfiguration> protocol_configs = new Vector<ProtocolConfiguration>() ;
    Vector<Protocol> protocols = new Vector<Protocol>() ;
   
    // create the layer described by INETADDRESSES
    protocol = Configurator.createProtocol(configurableObjectsProps, stack) ;
   
    // process the defaults (want this eventually)
    protocol_configs.add(new ProtocolConfiguration(configurableObjectsProps)) ;
    protocols.add(protocol) ;
       
    // get the value which should have been assigned a default
    List<Object> configObjs = ((CONFIGOBJPROTOCOL)protocol).getConfigurableObjects() ;
    assert configObjs.size() == 1 ;
    Object configObj = configObjs.get(0) ;
    assert configObj instanceof ConfigurableObject ; 
    assert ((ConfigurableObject)configObj).getStringProp().equals("test") ;
   
  }

 
  public static class ORDERING extends Protocol {
    List<String> list = new LinkedList<String>() ;
   
    @Property(name="a", dependsUpon="b")
    public void setA(int a) {
      list.add("a") ;
    }
    @Property(name="b", dependsUpon="c")
    public void setB(int b) {
      list.add("b") ;
    }
    @Property(name="c")
    public void setC(int c) {
      list.add("c") ;
    }
    List<String> getList() {
      return list ;
    }
    public String getName() {
      return name ;
    }
    // do nothing
    public Object down(Event evt) {
      return down_prot.down(evt);
    }
    // do nothing
    public Object up(Event evt) {
      return up_prot.up(evt);
    }
  }
  public static class REFS extends Protocol {

    @Property(name="a", dependsUpon="b")
    public void setA(int a) {
    }
    @Property(name="b", dependsUpon="d")
    public void setB(int b) { 
    }
    @Property(name="c")
    public void setC(int c) {
    }
    public String getName() {
      return name ;
    }
    // do nothing
    public Object down(Event evt) {
      return down_prot.down(evt);
    }
    // do nothing
    public Object up(Event evt) {
      return up_prot.up(evt);
    }
  }
  public static class DEFAULTS extends Protocol {
    int a ;
    int b ;
    InetAddress c ;
   
    @Property(name="a")
    public void setA(int a) {
      this.a = a ;
    }
    @Property(name="b")
    public void setB(int b) {
      this.b = b ;
    }
    @Property(name="c", defaultValueIPv4="192.168.1.10")
    public void setC(InetAddress ia) {
      this.c = ia ;
    }
    public int getA() {
      return a ;
    }
    public int getB() {
      return b ;
    }
    public InetAddress getC() {
      return c ;
    }
    public String getName() {
      return name ;
    }
    // do nothing
    public Object down(Event evt) {
      return down_prot.down(evt);
    }
    // do nothing
    public Object up(Event evt) {
      return up_prot.up(evt);
    }
  }
  public static class INETADDRESSES extends Protocol {
    InetAddress inetAddressMethod ;
   
    @Property(name="inetAddressField")
    InetAddress inetAddressField ;
   
    public InetAddress getInetAddressField() {
      return inetAddressField ;
    }
    @Property(name="inetAddressMethod")
    public void setInetAddressMethod(InetAddress ia) {
      this.inetAddressMethod = ia ;
    }
    public InetAddress getInetAddressMethod() {
      return inetAddressMethod ;
    }

    @Property(description="fred")
    int port_range = 0 ;
   
    // List<IpAddress> - uses InitialHosts converter
    List<IpAddress> ipAddressListMethod ;
   
    @Property(name="ipAddressListField", converter=PropertyConverters.InitialHosts.class)
    List<IpAddress> ipAddressListField ;
   
    public List<IpAddress> getIpAddressListField() {
      return ipAddressListField ;
    }
    @Property(name="ipAddressListMethod", converter=PropertyConverters.InitialHosts.class, dependsUpon="port_range")
    public void setIpAddressListMethod(List<IpAddress> ia) {
      this.ipAddressListMethod = ia ;
    }
    public List<IpAddress> getIpAddressListMethod() {
      return ipAddressListMethod ;
    }
   
    public String getName() {
      return name ;
    }
    // do nothing
    public Object down(Event evt) {
      return down_prot.down(evt);
    }
    // do nothing
    public Object up(Event evt) {
      return up_prot.up(evt);
    }
  }
  public static class CONFIGOBJPROTOCOL extends Protocol {

      private Object configObjInstance=null;
   
      @Property(name="config_object_class")
      public void setConfigurableObjectClass(String class_name) throws Exception {
            configObjInstance=Class.forName(class_name).newInstance();
      }
     
      protected List<Object> getConfigurableObjects() {
          List<Object> retval=new LinkedList<Object>();
          if(configObjInstance != null)
              retval.add(configObjInstance);
          return retval;
      }
   
    public String getName() {
      return name ;
    }
    // do nothing
    public Object down(Event evt) {
      return down_prot.down(evt);
    }
    // do nothing
    public Object up(Event evt) {
      return up_prot.up(evt);
    }
  }

  public static class ConfigurableObject {
    @Property(name="string_property")
    String stringProp = null ;
    public String getStringProp() {
      return stringProp ;
    }
    public void setStringProp(String s) {
      this.stringProp = s ;
    }
  }
}        
TOP

Related Classes of org.jgroups.tests.ProtocolConfigurationTest$ConfigurableObject

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.