Merge branch 'ONOS-Next' of https://github.com/OPENNETWORKINGLAB/ONLabTest into ONOS-Next
diff --git a/TestON/drivers/common/cli/onosdriver.py b/TestON/drivers/common/cli/onosdriver.py
index b91689a..0518188 100644
--- a/TestON/drivers/common/cli/onosdriver.py
+++ b/TestON/drivers/common/cli/onosdriver.py
@@ -160,3 +160,170 @@
main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
main.cleanup()
main.exit()
+
+ def git_pull(self, comp1=""):
+ '''
+ Assumes that "git pull" works without login
+
+ This function will perform a git pull on the ONOS instance.
+ If used as git_pull("NODE") it will do git pull + NODE. This is
+ for the purpose of pulling from other nodes if necessary.
+
+ Otherwise, this function will perform a git pull in the
+ ONOS repository. If it has any problems, it will return main.ERROR
+ If it successfully does a git_pull, it will return a 1.
+ If it has no updates, it will return a 0.
+
+ '''
+ try:
+ # main.log.info(self.name + ": Stopping ONOS")
+ #self.stop()
+ self.handle.sendline("cd " + self.home)
+ self.handle.expect("ONOS\$")
+ if comp1=="":
+ self.handle.sendline("git pull")
+ else:
+ self.handle.sendline("git pull " + comp1)
+
+ uptodate = 0
+ i=self.handle.expect(['fatal',
+ 'Username\sfor\s(.*):\s',
+ '\sfile(s*) changed,\s',
+ 'Already up-to-date',
+ 'Aborting',
+ 'You\sare\snot\scurrently\son\sa\sbranch',
+ 'You\sasked\sme\sto\spull\swithout\stelling\sme\swhich\sbranch\syou',
+ 'Pull\sis\snot\spossible\sbecause\syou\shave\sunmerged\sfiles',
+ pexpect.TIMEOUT],
+ timeout=300)
+ #debug
+ #main.log.report(self.name +": \n"+"git pull response: " + str(self.handle.before) + str(self.handle.after))
+ if i==0:
+ main.log.error(self.name + ": Git pull had some issue...")
+ return main.ERROR
+ elif i==1:
+ main.log.error(self.name + ": Git Pull Asking for username. ")
+ return main.ERROR
+ elif i==2:
+ main.log.info(self.name + ": Git Pull - pulling repository now")
+ self.handle.expect("ONOS\$", 120)
+ return 0
+ elif i==3:
+ main.log.info(self.name + ": Git Pull - Already up to date")
+ return 1
+ elif i==4:
+ main.log.info(self.name + ": Git Pull - Aborting... Are there conflicting git files?")
+ return main.ERROR
+ elif i==5:
+ main.log.info(self.name + ": Git Pull - You are not currently on a branch so git pull failed!")
+ return main.ERROR
+ elif i==6:
+ main.log.info(self.name + ": Git Pull - You have not configured an upstream branch to pull from. Git pull failed!")
+ return main.ERROR
+ elif i==7:
+ main.log.info(self.name + ": Git Pull - Pull is not possible because you have unmerged files.")
+ return main.ERROR
+ elif i==8:
+ main.log.error(self.name + ": Git Pull - TIMEOUT")
+ main.log.error(self.name + " Response was: " + str(self.handle.before))
+ return main.ERROR
+ else:
+ main.log.error(self.name + ": Git Pull - Unexpected response, check for pull errors")
+ return main.ERROR
+ except pexpect.EOF:
+ main.log.error(self.name + ": EOF exception found")
+ main.log.error(self.name + ": " + self.handle.before)
+ main.cleanup()
+ main.exit()
+ except:
+ main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.log.error( traceback.print_exc() )
+ main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.cleanup()
+ main.exit()
+
+ def git_checkout(self, branch="master"):
+ '''
+ Assumes that "git pull" works without login
+
+ This function will perform a git git checkout on the ONOS instance.
+ If used as git_checkout("branch") it will do git checkout of the "branch".
+
+ Otherwise, this function will perform a git checkout of the master
+ branch of the ONOS repository. If it has any problems, it will return
+ main.ERROR.
+ If the branch was already the specified branch, or the git checkout was
+ successful then the function will return main.TRUE.
+
+ '''
+ try:
+ # main.log.info(self.name + ": Stopping ONOS")
+ #self.stop()
+ self.handle.sendline("cd " + self.home)
+ self.handle.expect("ONOS\$")
+ if branch != 'master':
+ #self.handle.sendline('git stash')
+ #self.handle.expect('ONOS\$')
+ #print "After issuing git stash cmnd: ", self.handle.before
+ cmd = "git checkout "+branch
+ print "checkout cmd = ", cmd
+ self.handle.sendline(cmd)
+ uptodate = 0
+ i=self.handle.expect(['fatal',
+ 'Username\sfor\s(.*):\s',
+ 'Already\son\s\'',
+ 'Switched\sto\sbranch\s\'',
+ pexpect.TIMEOUT],timeout=60)
+ else:
+ #self.handle.sendline('git stash apply')
+ #self.handle.expect('ONOS\$')
+ #print "After issuing git stash apply cmnd: ", self.handle.before
+ cmd = "git checkout "+branch
+ print "checkout cmd = ", cmd
+ self.handle.sendline(cmd)
+ uptodate = 0
+ switchedToMaster = 0
+ i=self.handle.expect(['fatal',
+ 'Username\sfor\s(.*):\s',
+ 'Already\son\s\'master\'',
+ 'Switched\sto\sbranch\s\'master\'',
+ pexpect.TIMEOUT],timeout=60)
+
+
+ if i==0:
+ main.log.error(self.name + ": Git checkout had some issue...")
+ return main.ERROR
+ elif i==1:
+ main.log.error(self.name + ": Git checkout Asking for username!!! Bad!")
+ return main.ERROR
+ elif i==2:
+ main.log.info(self.name + ": Git Checkout %s : Already on this branch" %branch)
+ self.handle.expect("ONOS\$")
+ print "after checkout cmd = ", self.handle.before
+ switchedToMaster = 1
+ return main.TRUE
+ elif i==3:
+ main.log.info(self.name + ": Git checkout %s - Switched to this branch" %branch)
+ self.handle.expect("ONOS\$")
+ print "after checkout cmd = ", self.handle.before
+ switchedToMaster = 1
+ return main.TRUE
+ elif i==4:
+ main.log.error(self.name + ": Git Checkout- TIMEOUT")
+ main.log.error(self.name + " Response was: " + str(self.handle.before))
+ return main.ERROR
+ else:
+ main.log.error(self.name + ": Git Checkout - Unexpected response, check for pull errors")
+ return main.ERROR
+
+ except pexpect.EOF:
+ main.log.error(self.name + ": EOF exception found")
+ main.log.error(self.name + ": " + self.handle.before)
+ main.cleanup()
+ main.exit()
+ except:
+ main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.log.error( traceback.print_exc() )
+ main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+ main.cleanup()
+ main.exit()