# 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