a0024a691ea2af9da4c14502761c4c4ab44e2136
[tests.git] / system / TestApiserver.py
1 # Thierry Parmentelat <thierry.parmentelat@inria.fr>
2 # Copyright (C) 2010 INRIA 
3 #
4 # wrapper to xmlrpc server, that support dry-run commands
5 # we dont want to have to depend on PLCAPI, so:
6 import xmlrpclib
7
8 # the default value is for the dry run mode
9 server_methods = [ ('GetNodes' ,  []),
10                    ('AddNode' , True),
11                    ('SetNodePlainBootstrapfs', True),
12                    ('DeleteNode' , True),
13                    ('UpdateNode' , True),
14                    ('AddInterface' , True),
15                    ('AddIpAddress' , True),
16                    ('AddRoute' , True),
17                    ('GetInterfaces' , True),
18                    ('GetTagTypes' , []),
19                    ('AddTagType' , True),
20                    ('AddInterfaceTag' , True),
21                    ('GetBootMedium' , True),
22                    ('GetNodeGroups' , True),
23                    ('AddNodeGroup' , True),
24                    ('DeleteNodeGroup', True),
25                    ('GetNodeTags', True),
26                    ('AddNodeTag', True),
27                    ('AddInitScript' , True),
28                    ('DeleteInitScript', True),
29                    ('GetInitScripts', True),
30                    ('AddSite' , True),
31                    ('AddSiteAddress' , True),
32                    ('DeleteSite' , True),
33                    ('DeleteSlice' , True),
34                    ('AddSlice' , True),
35                    ('AddPersonToSlice' , True),
36                    ('AddSliceToNodes' , True),
37                    ('DeleteSliceFromNodes' , True),
38                    ('AddSliceTag' , True),
39                    ('AddPerson' , True),
40                    ('UpdatePerson' , True),
41                    ('AddRoleToPerson' , True),
42                    ('AddPersonToSite' , True),
43                    ('DeletePerson' , True),
44                    ('AddPersonKey' , True),
45                    ('GetPlcRelease', {'build': {'target-arch':'i386'}}),
46                    ('GetSites', []),
47                    ('GetSlices', [{'name':'dry_run_slice','node_ids':['dry_run']}]),
48                    ('GetLeaseGranularity', 180),
49                    ('AddLeases', True),
50                    ('GetLeases', []),
51                    ('DeleteLeases',True),
52                    ('GetConfFiles',[]),
53                    ('AddConfFile','True'),
54                    ('GetSliceTags',[]),
55                    ('system.listMethods',[]),
56                    ]
57
58 class TestApiserver:
59     class Callable:
60         def __init__(self,server,dry_run,method,defaults):
61             self.server=server
62             self.dry_run=dry_run
63             self.method=method
64             self.defaults=defaults
65         def __call__ (self, *args):
66             if self.dry_run:
67                 print "dry_run:",self.method,
68                 if len(args)>0 and type(args[0])==type({}) and args[0].has_key('AuthMethod'):
69                     print '<auth>',
70                     args=args[1:]
71                 print '(',args,')'
72                 return self.defaults
73             else:
74                 actual_method=getattr(self.server,self.method)
75                 return actual_method(*args)
76
77     def __init__(self,url,dry_run=False):
78         self.apiserver = xmlrpclib.ServerProxy(url,allow_none=True)
79         self.dry_run=dry_run
80         for (method,defaults) in server_methods:
81             setattr(self,method,TestApiserver.Callable(self.apiserver,dry_run,method,defaults))
82     
83     def set_dry_run (self, dry_run):
84         self.dry_run=dry_run
85         for (method,defaults) in server_methods:
86             getattr(self,method).dry_run = dry_run
87
88     def has_method (self, methodname):
89         return methodname in self.apiserver.system.listMethods()