# Copyright 2021-2024 Open Networking Foundation (ONF) and the ONF Contributors
#
# 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