blob: c3d3297e65c71b2edece8ba6f6698b593f085eb2 [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
62 def connect( self ):
63
64 vars( main )[ self.name + 'log' ] = logging.getLogger( self.name )
65
66 session_file = main.logdir + "/" + self.name + ".session"
67 self.log_handler = logging.FileHandler( session_file )
68 self.log_handler.setLevel( logging.DEBUG )
69
70 vars( main )[ self.name + 'log' ].setLevel( logging.DEBUG )
71 _formatter = logging.Formatter(
72 "%(asctime)s %(name)-10s: %(levelname)-8s: %(message)s" )
73 self.log_handler.setFormatter( _formatter )
74 vars( main )[ self.name + 'log' ].addHandler( self.log_handler )
75 # Adding header for the component log
76 vars( main )[ self.name + 'log' ].info( main.logHeader )
adminbae64d82013-08-01 10:50:15 -070077 # Opening the session log to append command's execution output
kelvin-onlab2f4ef842015-01-19 12:49:33 -080078 self.logfile_handler = open( session_file, "a" )
79
adminbae64d82013-08-01 10:50:15 -070080 return "Dummy"
kelvin-onlab2f4ef842015-01-19 12:49:33 -080081
82 def execute( self, cmd ):
adminbae64d82013-08-01 10:50:15 -070083 return main.TRUE
kelvin-onlab2f4ef842015-01-19 12:49:33 -080084 # import commands
85 # return commands.getoutput( cmd )
86
87 def disconnect( self ):
88 return main.TRUE
89
90 def config( self ):
adminbae64d82013-08-01 10:50:15 -070091 self = self
92 # Need to update the configuration code
kelvin-onlab2f4ef842015-01-19 12:49:33 -080093
94 def cleanup( self ):
adminbae64d82013-08-01 10:50:15 -070095 return main.TRUE
kelvin-onlab2f4ef842015-01-19 12:49:33 -080096
97 def log( self, message ):
98 """
99 Here finding the for the component to which the
adminbae64d82013-08-01 10:50:15 -0700100 log message based on the called child object.
kelvin-onlab2f4ef842015-01-19 12:49:33 -0800101 """
102 vars( main )[ self.name + 'log' ].info( "\n" + message + "\n" )
103
104 def close_log_handles( self ):
105 vars( main )[ self.name + 'log' ].removeHandler( self.log_handler )
adminbae64d82013-08-01 10:50:15 -0700106 if self.logfile_handler:
107 self.logfile_handler.close()
kelvin-onlab2f4ef842015-01-19 12:49:33 -0800108
109 def get_version( self ):
adminbae64d82013-08-01 10:50:15 -0700110 return "Version unknown"
111
Jon Hall20ead012015-02-18 14:00:42 -0800112 def experimentRun( self, *args, **kwargs ):
113 # FIXME handle *args
kelvin-onlab2f4ef842015-01-19 12:49:33 -0800114 args = utilities.parse_args( [ "RETURNS" ], **kwargs )
115 return args[ "RETURNS" ]
adminbae64d82013-08-01 10:50:15 -0700116
adminbae64d82013-08-01 10:50:15 -0700117if __name__ != "__main__":
118 import sys
kelvin-onlab2f4ef842015-01-19 12:49:33 -0800119 sys.modules[ __name__ ] = Component()