onos-package now patches the hazelcast.xml with proper interface for use by the test VMs.
diff --git a/tools/build/onos-package b/tools/build/onos-package
index cb1b7e7..72486ad 100755
--- a/tools/build/onos-package
+++ b/tools/build/onos-package
@@ -27,6 +27,7 @@
# Stage the ONOS admin scripts and patch in Karaf service wrapper extras
cp -r $ONOS_ROOT/tools/package/bin .
cp -r $ONOS_ROOT/tools/package/wrapper/* $KARAF_DIST
+cp -r $ONOS_ROOT/tools/package/etc/* $KARAF_DIST/etc
# Stage the ONOS bundles
mkdir -p $KARAF_DIST/system/org/onlab
diff --git a/tools/dev/bash_profile b/tools/dev/bash_profile
index cc19a4d..de0ed1e 100644
--- a/tools/dev/bash_profile
+++ b/tools/dev/bash_profile
@@ -1,5 +1,6 @@
#!/bin/bash
# ONOS developer BASH profile conveniences
+# Simply include in your own .bash_aliases or .bash_profile
# Root of the ONOS source tree
export ONOS_ROOT=${ONOS_ROOT:-~/onos-next}
@@ -42,6 +43,23 @@
alias gui='open http://localhost:8181/onos/tvue'
+# Test related conveniences
+
+# Default virtual box ONOS instances 1,2 & 3
+export OC1="192.168.56.101"
+export OC2="192.168.56.102"
+export OC3="192.168.56.103"
+
+# Default instance is #1
+export OCI="$OC1"
+
+# SSH to a specified ONOS instance
+function sshctl {
+ [ -n "$1" ] && OCI=$1 && shift
+ ssh -Y sdn@$OCI "$@"
+}
+
+
# Miscellaneous
function spy {
ps -ef | egrep "$@" | grep -v egrep
diff --git a/tools/package/etc/hazelcast.xml b/tools/package/etc/hazelcast.xml
new file mode 100644
index 0000000..5cb41ba
--- /dev/null
+++ b/tools/package/etc/hazelcast.xml
@@ -0,0 +1,203 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config hazelcast-config-3.2.xsd"
+ xmlns="http://www.hazelcast.com/schema/config"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <group>
+ <name>onos</name>
+ <password>rocks</password>
+ </group>
+ <management-center enabled="false">http://localhost:8080/mancenter</management-center>
+ <network>
+ <port auto-increment="true" port-count="100">5701</port>
+ <outbound-ports>
+ <!--
+ Allowed port range when connecting to other nodes.
+ 0 or * means use system provided port.
+ -->
+ <ports>0</ports>
+ </outbound-ports>
+ <join>
+ <multicast enabled="true">
+ <multicast-group>224.2.2.3</multicast-group>
+ <multicast-port>54327</multicast-port>
+ </multicast>
+ <tcp-ip enabled="false">
+ <interface>127.0.0.1</interface>
+ </tcp-ip>
+ <aws enabled="false">
+ <access-key>my-access-key</access-key>
+ <secret-key>my-secret-key</secret-key>
+ <!--optional, default is us-east-1 -->
+ <region>us-west-1</region>
+ <!--optional, default is ec2.amazonaws.com. If set, region shouldn't be set as it will override this property -->
+ <host-header>ec2.amazonaws.com</host-header>
+ <!-- optional, only instances belonging to this group will be discovered, default will try all running instances -->
+ <security-group-name>hazelcast-sg</security-group-name>
+ <tag-key>type</tag-key>
+ <tag-value>hz-nodes</tag-value>
+ </aws>
+ </join>
+ <interfaces enabled="true">
+ <interface>10.1.9.*</interface>
+ </interfaces>
+ <ssl enabled="false"/>
+ <socket-interceptor enabled="false"/>
+ <symmetric-encryption enabled="false">
+ <!--
+ encryption algorithm such as
+ DES/ECB/PKCS5Padding,
+ PBEWithMD5AndDES,
+ AES/CBC/PKCS5Padding,
+ Blowfish,
+ DESede
+ -->
+ <algorithm>PBEWithMD5AndDES</algorithm>
+ <!-- salt value to use when generating the secret key -->
+ <salt>thesalt</salt>
+ <!-- pass phrase to use when generating the secret key -->
+ <password>thepass</password>
+ <!-- iteration count to use when generating the secret key -->
+ <iteration-count>19</iteration-count>
+ </symmetric-encryption>
+ </network>
+ <partition-group enabled="false"/>
+ <executor-service>
+ <pool-size>16</pool-size>
+ <!-- Queue capacity. 0 means Integer.MAX_VALUE -->
+ <queue-capacity>0</queue-capacity>
+ </executor-service>
+ <queue name="default">
+ <!--
+ Maximum size of the queue. When a JVM's local queue size reaches the maximum,
+ all put/offer operations will get blocked until the queue size
+ of the JVM goes down below the maximum.
+ Any integer between 0 and Integer.MAX_VALUE. 0 means
+ Integer.MAX_VALUE. Default is 0.
+ -->
+ <max-size>0</max-size>
+ <!--
+ Number of backups. If 1 is set as the backup-count for example,
+ then all entries of the map will be copied to another JVM for
+ fail-safety. 0 means no backup.
+ -->
+ <backup-count>1</backup-count>
+ <!--
+ Number of async backups. 0 means no backup.
+ -->
+ <async-backup-count>0</async-backup-count>
+ <empty-queue-ttl>-1</empty-queue-ttl>
+ </queue>
+
+ <map name="default">
+ <!--
+ Data type that will be used for storing recordMap.
+ Possible values:
+ BINARY (default): keys and values will be stored as binary data
+ OBJECT : values will be stored in their object forms
+ OFFHEAP : values will be stored in non-heap region of JVM
+ -->
+ <in-memory-format>BINARY</in-memory-format>
+ <!--
+ Number of backups. If 1 is set as the backup-count for example,
+ then all entries of the map will be copied to another JVM for
+ fail-safety. 0 means no backup.
+ -->
+ <backup-count>1</backup-count>
+ <!--
+ Number of async backups. 0 means no backup.
+ -->
+ <async-backup-count>0</async-backup-count>
+ <!--
+ Maximum number of seconds for each entry to stay in the map. Entries that are
+ older than <time-to-live-seconds> and not updated for <time-to-live-seconds>
+ will get automatically evicted from the map.
+ Any integer between 0 and Integer.MAX_VALUE. 0 means infinite. Default is 0.
+ -->
+ <time-to-live-seconds>0</time-to-live-seconds>
+ <!--
+ Maximum number of seconds for each entry to stay idle in the map. Entries that are
+ idle(not touched) for more than <max-idle-seconds> will get
+ automatically evicted from the map. Entry is touched if get, put or containsKey is called.
+ Any integer between 0 and Integer.MAX_VALUE. 0 means infinite. Default is 0.
+ -->
+ <max-idle-seconds>0</max-idle-seconds>
+ <!--
+ Valid values are:
+ NONE (no eviction),
+ LRU (Least Recently Used),
+ LFU (Least Frequently Used).
+ NONE is the default.
+ -->
+ <eviction-policy>NONE</eviction-policy>
+ <!--
+ Maximum size of the map. When max size is reached,
+ map is evicted based on the policy defined.
+ Any integer between 0 and Integer.MAX_VALUE. 0 means
+ Integer.MAX_VALUE. Default is 0.
+ -->
+ <max-size policy="PER_NODE">0</max-size>
+ <!--
+ When max. size is reached, specified percentage of
+ the map will be evicted. Any integer between 0 and 100.
+ If 25 is set for example, 25% of the entries will
+ get evicted.
+ -->
+ <eviction-percentage>25</eviction-percentage>
+ <!--
+ While recovering from split-brain (network partitioning),
+ map entries in the small cluster will merge into the bigger cluster
+ based on the policy set here. When an entry merge into the
+ cluster, there might an existing entry with the same key already.
+ Values of these entries might be different for that same key.
+ Which value should be set for the key? Conflict is resolved by
+ the policy set here. Default policy is PutIfAbsentMapMergePolicy
+
+ There are built-in merge policies such as
+ com.hazelcast.map.merge.PassThroughMergePolicy; entry will be added if there is no existing entry for the key.
+ com.hazelcast.map.merge.PutIfAbsentMapMergePolicy ; entry will be added if the merging entry doesn't exist in the cluster.
+ com.hazelcast.map.merge.HigherHitsMapMergePolicy ; entry with the higher hits wins.
+ com.hazelcast.map.merge.LatestUpdateMapMergePolicy ; entry with the latest update wins.
+ -->
+ <merge-policy>com.hazelcast.map.merge.PassThroughMergePolicy</merge-policy>
+ </map>
+
+ <multimap name="default">
+ <backup-count>1</backup-count>
+ <value-collection-type>SET</value-collection-type>
+ </multimap>
+
+ <multimap name="default">
+ <backup-count>1</backup-count>
+ <value-collection-type>SET</value-collection-type>
+ </multimap>
+
+ <list name="default">
+ <backup-count>1</backup-count>
+ </list>
+
+ <set name="default">
+ <backup-count>1</backup-count>
+ </set>
+
+ <jobtracker name="default">
+ <max-thread-size>0</max-thread-size>
+ <!-- Queue size 0 means number of partitions * 2 -->
+ <queue-size>0</queue-size>
+ <retry-count>0</retry-count>
+ <chunk-size>1000</chunk-size>
+ <communicate-stats>true</communicate-stats>
+ <topology-changed-strategy>CANCEL_RUNNING_OPERATION</topology-changed-strategy>
+ </jobtracker>
+
+ <semaphore name="default">
+ <initial-permits>0</initial-permits>
+ <backup-count>1</backup-count>
+ <async-backup-count>0</async-backup-count>
+ </semaphore>
+
+ <serialization>
+ <portable-version>0</portable-version>
+ </serialization>
+
+ <services enable-defaults="true" />
+</hazelcast>
diff --git a/tools/test/bin/onos-log b/tools/test/bin/onos-log
new file mode 100755
index 0000000..611d6d7
--- /dev/null
+++ b/tools/test/bin/onos-log
@@ -0,0 +1,18 @@
+#!/bin/bash
+#-------------------------------------------------------------------------------
+# Monitors remote ONOS log file.
+#-------------------------------------------------------------------------------
+
+[ ! -d "$ONOS_ROOT" ] && echo "ONOS_ROOT is not defined" >&2 && exit 1
+. $ONOS_ROOT/tools/build/envDefaults
+
+remote=$ONOS_USER@${1:-$OCI}
+
+LOG=$ONOS_INSTALL_DIR/log/karaf.log
+
+ssh $remote "
+ while true; do
+ [ ! -f $LOG ] && sleep 2 && continue
+ tail -n 512 --follow=name $LOG --sleep-interval 2
+ done
+"