[VOL-4767] Add basic test and library for BBF-Adapter

Change-Id: Ia35f7f0745e8f104aad7cd762ac6c6c6864a0706
diff --git a/scripts/bbf_device_aggregation.exp b/scripts/bbf_device_aggregation.exp
new file mode 100644
index 0000000..a5c926b
--- /dev/null
+++ b/scripts/bbf_device_aggregation.exp
@@ -0,0 +1,126 @@
+# Copyright 2021-present Open Networking Foundation
+#
+# Licensed 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.
+#!/usr/bin/expect -f
+#
+# This Expect script was generated by autoexpect on Wed Aug 17 22:24:22 2022
+# Expect and autoexpect were both written by Don Libes, NIST.
+#
+# Note that autoexpect does not guarantee a working script.  It
+# necessarily has to guess about certain things.  Two reasons a script
+# might fail are:
+#
+# 1) timing - A surprising number of programs (rn, ksh, zsh, telnet,
+# etc.) and devices discard or ignore keystrokes that arrive "too
+# quickly" after prompts.  If you find your new script hanging up at
+# one spot, try adding a short sleep just before the previous send.
+# Setting "force_conservative" to 1 (see below) makes Expect do this
+# automatically - pausing briefly before sending each character.  This
+# pacifies every program I know of.  The -c flag makes the script do
+# this in the first place.  The -C flag allows you to define a
+# character to toggle this mode off and on.
+
+set force_conservative 0  ;# set to 1 to force conservative mode even if
+			  ;# script wasn't run conservatively originally
+if {$force_conservative} {
+	set send_slow {1 .1}
+	proc send {ignore arg} {
+		sleep .1
+		exp_send -s -- $arg
+	}
+}
+
+#
+# 2) differing output - Some programs produce different output each time
+# they run.  The "date" command is an obvious example.  Another is
+# ftp, if it produces throughput statistics at the end of a file
+# transfer.  If this causes a problem, delete these patterns or replace
+# them with wildcards.  An alternative is to use the -p flag (for
+# "prompt") which makes Expect only look for the last line of output
+# (i.e., the prompt).  The -P flag allows you to define a character to
+# toggle this mode off and on.
+#
+# Read the man page for more info.
+#
+# -Don
+
+set bbfPodName [lindex $argv 0]
+
+set timeout 5
+spawn ssh -p 50022 voltha@localhost
+match_max 100000
+
+expect {
+	{Are you sure you want to continue connecting (yes/no/\[fingerprint\])? }
+	{ send -- "yes\r"
+	expect "voltha@localhost's password: "
+	send -- "onf\r"
+	expect -exact "$bbfPodName:~\$"
+	send -- "netopeer2-cli\r"
+	expect -exact "> "
+	send -- "searchpath /etc/sysrepo/yang\r"
+	expect -exact "> "
+	send -- "ext-data /schema-mount.xml\r"
+	expect -exact "> "
+	send -- "connect --login voltha\r"
+	expect -exact "Are you sure you want to continue connecting (yes/no)? "
+	send -- "yes\r"
+	expect -exact "Password: "
+	send -- "onf\r"
+	expect -exact "> "
+	send -- "get-data --datastore operational --filter-xpath /bbf-device-aggregation:* --out output.xml"
+	expect -exact "get-data --datastore operational --filter-xpath /bbf-device-aggregation:* --out output.xml"
+	send -- "\r"
+	expect -exact "> "
+	send -- ""
+	expect -exact "$bbfPodName:~\$ \[6n"
+	expect eof ; exp_continue}
+
+	"voltha@localhost's password: " {
+	send -- "onf\r"
+	expect -exact "$bbfPodName:~\$"
+	send -- "netopeer2-cli\r"
+	expect -exact "> "
+	send -- "searchpath /etc/sysrepo/yang\r"
+	expect -exact "> "
+	send -- "ext-data /schema-mount.xml\r"
+	expect -exact "> "
+	send -- "connect --login voltha\r"
+	expect {
+		"Are you sure you want to continue connecting (yes/no)? "	{
+		send -- "yes\r"
+		expect -exact "Password: "
+		send -- "onf\r"
+		expect -exact "> "
+		send -- "get-data --datastore operational --filter-xpath /bbf-device-aggregation:* --out output.xml"
+		expect -exact "get-data --datastore operational --filter-xpath /bbf-device-aggregation:* --out output.xml"
+		send -- "\r"
+		expect -exact "> "
+		send -- ""
+		expect -exact "$bbfPodName:~\$ \[6n"
+		expect eof ; exp_continue}
+
+		"Password: " {
+		send -- "onf\r"
+		expect -exact "> "
+		send -- "get-data --datastore operational --filter-xpath /bbf-device-aggregation:* --out output.xml"
+		expect -exact "get-data --datastore operational --filter-xpath /bbf-device-aggregation:* --out output.xml"
+		send -- "\r"
+		expect -exact "> "
+		send -- ""
+		expect -exact "$bbfPodName:~\$ \[6n"
+		expect eof ; exp_continue}
+	}
+	}
+}
+exit 0
\ No newline at end of file