turn off server verification in testapiserver
[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 xmlrpc.client
7 import ssl
8
9 # the default value is for the dry run mode
10 server_methods = [ ('GetNodes', []),
11                    ('AddNode', True),
12                    ('SetNodePlainBootstrapfs', True),
13                    ('SetNodeFcdistro', True),
14                    ('SetNodePldistro', True),
15                    ('DeleteNode' , True),
16                    ('UpdateNode' , True),
17                    ('AddInterface' , True),
18                    ('AddIpAddress' , True),
19                    ('AddRoute' , True),
20                    ('GetInterfaces' , True),
21                    ('GetTagTypes' , []),
22                    ('AddTagType' , True),
23                    ('AddInterfaceTag' , True),
24                    ('GetBootMedium' , "some non-empty-string"),
25                    ('GetNodeGroups' , True),
26                    ('AddNodeGroup' , True),
27                    ('DeleteNodeGroup', True),
28                    ('GetNodeTags', True),
29                    ('AddNodeTag', True),
30                    ('AddInitScript' , True),
31                    ('DeleteInitScript', True),
32                    ('GetInitScripts', True),
33                    ('AddSite' , True),
34                    ('AddSiteAddress' , True),
35                    ('DeleteSite' , True),
36                    ('DeleteSlice' , True),
37                    ('AddSlice' , True),
38                    ('AddPersonToSlice' , True),
39                    ('AddSliceToNodes' , True),
40                    ('DeleteSliceFromNodes' , True),
41                    ('AddSliceTag' , True),
42                    ('AddPerson' , True),
43                    ('UpdatePerson' , True),
44                    ('AddRoleToPerson' , True),
45                    ('AddPersonToSite' , True),
46                    ('DeletePerson' , True),
47                    ('AddPersonKey' , True),
48                    ('GetPlcRelease', {'build': {'target-arch':'i386'}}),
49                    ('GetSites', []),
50                    ('GetSlices', [{'name':'dry_run_slice','node_ids':['dry_run']}]),
51                    ('GetLeaseGranularity', 180),
52                    ('AddLeases', True),
53                    ('GetLeases', []),
54                    ('DeleteLeases',True),
55                    ('GetConfFiles',[]),
56                    ('AddConfFile','True'),
57                    ('GetSliceTags',[]),
58                    ('GetNodeFlavour','dry-run-nodeflavour'),
59                    ('system.listMethods',[]),
60                    ]
61
62 class TestApiserver:
63     class Callable:
64         def __init__(self, server, dry_run, method, defaults):
65             self.server = server
66             self.dry_run = dry_run
67             self.method = method
68             self.defaults = defaults
69         def __call__ (self, *args):
70             if self.dry_run:
71                 print("dry_run:",self.method, end=' ')
72                 if len(args) > 0 and type(args[0]) == type({}) and 'AuthMethod' in args[0]:
73                     print('<auth>', end=' ')
74                     args = args[1:]
75                 print('(', args, ')')
76                 return self.defaults
77             else:
78                 actual_method = getattr(self.server, self.method)
79                 return actual_method(*args)
80
81     def __init__(self, url, dry_run=False):
82         self.apiserver = xmlrpc.client.ServerProxy(url, allow_none=True,
83                                                    use_builtin_types=True,
84                                                    context=ssl._create_unverified_context())
85         self.dry_run = dry_run
86         for method, defaults in server_methods:
87             setattr(self, method, TestApiserver.Callable(self.apiserver, dry_run, method, defaults))
88     
89     def set_dry_run (self, dry_run):
90         self.dry_run = dry_run
91         for (method, defaults) in server_methods:
92             getattr(self, method).dry_run = dry_run
93
94     def has_method (self, methodname):
95         return methodname in self.apiserver.system.listMethods()