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