blob: 3585244db4464dc569d809656918a7d2c890d31d [file] [log] [blame]
adminbae64d82013-08-01 10:50:15 -07001#!/usr/bin/env python
kelvin-onlab2f4ef842015-01-19 12:49:33 -08002"""
adminbae64d82013-08-01 10:50:15 -07003Created on 24-Oct-2012
Jeremy Ronquillo4d5f1d02017-10-13 20:23:57 +00004Copyright 2012 Open Networking Foundation (ONF)
kelvin-onlab2f4ef842015-01-19 12:49:33 -08005
Jeremy Songsterae01bba2016-07-11 15:39:17 -07006Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
7the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
8or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
adminbae64d82013-08-01 10:50:15 -07009
10 TestON is free software: you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation, either version 2 of the License, or
kelvin-onlab2f4ef842015-01-19 12:49:33 -080013 ( at your option ) any later version.
adminbae64d82013-08-01 10:50:15 -070014
15 TestON is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
kelvin-onlab2f4ef842015-01-19 12:49:33 -080021 along with TestON. If not, see <http://www.gnu.org/licenses/>.
kelvin-onlab2f4ef842015-01-19 12:49:33 -080022"""
Jon Hallfd8ce432015-07-21 13:07:53 -070023import logging
24
kelvin-onlab2f4ef842015-01-19 12:49:33 -080025
26class Component( object ):
27
28 """
adminbae64d82013-08-01 10:50:15 -070029 This is the tempalte class for components
kelvin-onlab2f4ef842015-01-19 12:49:33 -080030 """
Jon Hallca319892017-06-15 15:25:22 -070031 def __str__( self ):
32 try:
33 assert self.name
34 except AttributeError:
35 return repr( self )
36 return str( self.name )
37
kelvin-onlab2f4ef842015-01-19 12:49:33 -080038 def __init__( self ):
adminbae64d82013-08-01 10:50:15 -070039 self.default = ''
Jon Hallca319892017-06-15 15:25:22 -070040 self.name = ''
kelvin-onlab2f4ef842015-01-19 12:49:33 -080041 self.wrapped = sys.modules[ __name__ ]
Jon Halleb3a6842015-02-18 15:17:51 -080042 self.count = 0
Devin Limdc78e202017-06-09 18:30:07 -070043 self.prompt = "\$"
kelvin-onlab2f4ef842015-01-19 12:49:33 -080044
45 def __getattr__( self, name ):
46 """
Jon Hallca319892017-06-15 15:25:22 -070047 Called when an attribute lookup has not found the attribute
Jeremy Ronquillo4d5f1d02017-10-13 20:23:57 +000048 in the usual places (i.e. it is not an instance attribute nor
49 is it found in the class tree for self). name is the attribute
50 name. This method should return the (computed) attribute value
Jon Hallca319892017-06-15 15:25:22 -070051 or raise an AttributeError exception.
kelvin-onlab2f4ef842015-01-19 12:49:33 -080052 """
adminbae64d82013-08-01 10:50:15 -070053 try:
kelvin-onlab2f4ef842015-01-19 12:49:33 -080054 return getattr( self.wrapped, name )
Jon Hall20ead012015-02-18 14:00:42 -080055 except AttributeError as error:
Jon Halleb3a6842015-02-18 15:17:51 -080056 # NOTE: The first time we load a driver module we get this error
Jon Hall0fc0d452015-07-14 09:49:58 -070057 if "'module' object has no attribute '__path__'" in error:
58 pass
Jon Halleb3a6842015-02-18 15:17:51 -080059 else:
Jon Hallca319892017-06-15 15:25:22 -070060 raise error
kelvin-onlab2f4ef842015-01-19 12:49:33 -080061
Jon Hall9b0de1f2020-08-24 15:38:04 -070062 def checkOptions( self, var, defaultVar ):
63 if var is None or var == "":
64 return defaultVar
65 return var
66
kelvin-onlab2f4ef842015-01-19 12:49:33 -080067 def connect( self ):
68
69 vars( main )[ self.name + 'log' ] = logging.getLogger( self.name )
70
71 session_file = main.logdir + "/" + self.name + ".session"
72 self.log_handler = logging.FileHandler( session_file )
73 self.log_handler.setLevel( logging.DEBUG )
74
75 vars( main )[ self.name + 'log' ].setLevel( logging.DEBUG )
76 _formatter = logging.Formatter(
77 "%(asctime)s %(name)-10s: %(levelname)-8s: %(message)s" )
78 self.log_handler.setFormatter( _formatter )
79 vars( main )[ self.name + 'log' ].addHandler( self.log_handler )
80 # Adding header for the component log
81 vars( main )[ self.name + 'log' ].info( main.logHeader )
adminbae64d82013-08-01 10:50:15 -070082 # Opening the session log to append command's execution output
kelvin-onlab2f4ef842015-01-19 12:49:33 -080083 self.logfile_handler = open( session_file, "a" )
84
adminbae64d82013-08-01 10:50:15 -070085 return "Dummy"
kelvin-onlab2f4ef842015-01-19 12:49:33 -080086
87 def execute( self, cmd ):
adminbae64d82013-08-01 10:50:15 -070088 return main.TRUE
kelvin-onlab2f4ef842015-01-19 12:49:33 -080089 # import commands
90 # return commands.getoutput( cmd )
91
92 def disconnect( self ):
93 return main.TRUE
94
95 def config( self ):
adminbae64d82013-08-01 10:50:15 -070096 self = self
97 # Need to update the configuration code
kelvin-onlab2f4ef842015-01-19 12:49:33 -080098
99 def cleanup( self ):
adminbae64d82013-08-01 10:50:15 -0700100 return main.TRUE
kelvin-onlab2f4ef842015-01-19 12:49:33 -0800101
102 def log( self, message ):
103 """
104 Here finding the for the component to which the
adminbae64d82013-08-01 10:50:15 -0700105 log message based on the called child object.
kelvin-onlab2f4ef842015-01-19 12:49:33 -0800106 """
107 vars( main )[ self.name + 'log' ].info( "\n" + message + "\n" )
108
109 def close_log_handles( self ):
110 vars( main )[ self.name + 'log' ].removeHandler( self.log_handler )
adminbae64d82013-08-01 10:50:15 -0700111 if self.logfile_handler:
112 self.logfile_handler.close()
kelvin-onlab2f4ef842015-01-19 12:49:33 -0800113
114 def get_version( self ):
adminbae64d82013-08-01 10:50:15 -0700115 return "Version unknown"
116
Jon Hall20ead012015-02-18 14:00:42 -0800117 def experimentRun( self, *args, **kwargs ):
118 # FIXME handle *args
kelvin-onlab2f4ef842015-01-19 12:49:33 -0800119 args = utilities.parse_args( [ "RETURNS" ], **kwargs )
120 return args[ "RETURNS" ]
adminbae64d82013-08-01 10:50:15 -0700121
adminbae64d82013-08-01 10:50:15 -0700122if __name__ != "__main__":
123 import sys
kelvin-onlab2f4ef842015-01-19 12:49:33 -0800124 sys.modules[ __name__ ] = Component()