]>
git.proxmox.com Git - pve-storage.git/blob - test/run_bwlimit_tests.pl
10 use PVE
:: RPCEnvironment
;
14 my $datacenter_cfg = <<'EOF';
15 bwlimit: default=100,move=80,restore=60
18 my $storage_cfg = <<'EOF';
28 bwlimit default=50,move=40,restore=30
32 bwlimit default=20,move=40,restore=30
36 bwlimit default=200,move=400,restore=300
54 'user2 @test ' => { '/' => [ 'Sys.Modify' ], },
55 'user3 @test ' => { '/storage' => [ 'Datastore.Allocate' ], },
56 'user4 @test ' => { '/storage/d20m40r30' => [ 'Datastore.Allocate' ], },
59 my $pve_cluster_module ;
60 $pve_cluster_module = Test
:: MockModule-
> new ( 'PVE::Cluster' );
61 $pve_cluster_module -> mock (
65 if ( $file eq 'datacenter.cfg' ) {
66 return $datacenter_cfg ;
67 } elsif ( $file eq 'storage.cfg' ) {
70 die "TODO: mock get_config( $file ) \n " ;
75 $rpcenv_module = Test
:: MockModule-
> new ( 'PVE::RPCEnvironment' );
78 my ( $env, $user, $path, $perms, $noerr ) = @_ ;
79 return 1 if $user eq 'root @pam ' ;
80 my $userperms = $permissions ->{ $user }
81 or die "no permissions defined for user $user\n " ;
82 if ( defined ( my $pathperms = $userperms ->{ $path })) {
83 foreach my $pp ( @$pathperms ) {
84 foreach my $reqp ( @$perms ) {
85 return 1 if $pp eq $reqp ;
89 die "permission denied \n " if ! $noerr ;
94 my $rpcenv = PVE
:: RPCEnvironment-
> init ( 'pub' );
97 [ user
=> 'root @pam ' ],
98 [ [ 'unknown' , [ 'nolimit' ], undef ], 100 , 'root / generic default limit, requesting default' ],
99 [ [ 'move' , [ 'nolimit' ], undef ], 80 , 'root / specific default limit, requesting default (move)' ],
100 [ [ 'restore' , [ 'nolimit' ], undef ], 60 , 'root / specific default limit, requesting default (restore)' ],
101 [ [ 'unknown' , [ 'd50m40r30' ], undef ], 50 , 'root / storage default limit' ],
102 [ [ 'move' , [ 'd50m40r30' ], undef ], 40 , 'root / specific storage limit (move)' ],
103 [ [ 'restore' , [ 'd50m40r30' ], undef ], 30 , 'root / specific storage limit (restore)' ],
104 [ [ 'unknown' , [ 'nolimit' ], 0 ], 0 , 'root / generic default limit' ],
105 [ [ 'move' , [ 'nolimit' ], 0 ], 0 , 'root / specific default limit (move)' ],
106 [ [ 'restore' , [ 'nolimit' ], 0 ], 0 , 'root / specific default limit (restore)' ],
107 [ [ 'unknown' , [ 'd50m40r30' ], 0 ], 0 , 'root / storage default limit' ],
108 [ [ 'move' , [ 'd50m40r30' ], 0 ], 0 , 'root / specific storage limit (move)' ],
109 [ [ 'restore' , [ 'd50m40r30' ], 0 ], 0 , 'root / specific storage limit (restore)' ],
110 [ [ 'migrate' , undef , 100 ], 100 , 'root / undef storage (migrate)' ],
111 [ [ 'migrate' , [], 100 ], 100 , 'root / no storage (migrate)' ],
113 [ user
=> 'user1 @test ' ],
114 [ [ 'unknown' , [ 'nolimit' ], undef ], 100 , 'generic default limit' ],
115 [ [ 'move' , [ 'nolimit' ], undef ], 80 , 'specific default limit (move)' ],
116 [ [ 'restore' , [ 'nolimit' ], undef ], 60 , 'specific default limit (restore)' ],
117 [ [ 'unknown' , [ 'd50m40r30' ], undef ], 50 , 'storage default limit' ],
118 [ [ 'move' , [ 'd50m40r30' ], undef ], 40 , 'specific storage limit (move)' ],
119 [ [ 'restore' , [ 'd50m40r30' ], undef ], 30 , 'specific storage limit (restore)' ],
120 [ [ 'unknown' , [ 'd200m400r300' ], undef ], 200 , 'storage default limit above datacenter limits' ],
121 [ [ 'move' , [ 'd200m400r300' ], undef ], 400 , 'specific storage limit above datacenter limits (move)' ],
122 [ [ 'restore' , [ 'd200m400r300' ], undef ], 300 , 'specific storage limit above datacenter limits (restore)' ],
123 [ [ 'unknown' , [ 'd50' ], undef ], 50 , 'storage default limit' ],
124 [ [ 'move' , [ 'd50' ], undef ], 50 , 'storage default limit (move)' ],
125 [ [ 'restore' , [ 'd50' ], undef ], 50 , 'storage default limit (restore)' ],
127 [ user
=> 'user2 @test ' ],
128 [ [ 'unknown' , [ 'nolimit' ], 0 ], 0 , 'generic default limit with Sys.Modify, passing unlimited' ],
129 [ [ 'unknown' , [ 'nolimit' ], undef ], 100 , 'generic default limit with Sys.Modify' ],
130 [ [ 'move' , [ 'nolimit' ], undef ], 80 , 'specific default limit with Sys.Modify (move)' ],
131 [ [ 'restore' , [ 'nolimit' ], undef ], 60 , 'specific default limit with Sys.Modify (restore)' ],
132 [ [ 'restore' , [ 'nolimit' ], 0 ], 0 , 'specific default limit with Sys.Modify, passing unlimited (restore)' ],
133 [ [ 'move' , [ 'nolimit' ], 0 ], 0 , 'specific default limit with Sys.Modify, passing unlimited (move)' ],
134 [ [ 'unknown' , [ 'd50m40r30' ], undef ], 50 , 'storage default limit with Sys.Modify' ],
135 [ [ 'restore' , [ 'd50m40r30' ], undef ], 30 , 'specific storage limit with Sys.Modify (restore)' ],
136 [ [ 'move' , [ 'd50m40r30' ], undef ], 40 , 'specific storage limit with Sys.Modify (move)' ],
138 [ user
=> 'user3 @test ' ],
139 [ [ 'unknown' , [ 'nolimit' ], undef ], 100 , 'generic default limit with privileges on /' ],
140 [ [ 'unknown' , [ 'nolimit' ], 80 ], 80 , 'generic default limit with privileges on /, passing an override value' ],
141 [ [ 'unknown' , [ 'nolimit' ], 0 ], 0 , 'generic default limit with privileges on /, passing unlimited' ],
142 [ [ 'move' , [ 'nolimit' ], undef ], 80 , 'specific default limit with privileges on / (move)' ],
143 [ [ 'move' , [ 'nolimit' ], 0 ], 0 , 'specific default limit with privileges on /, passing unlimited (move)' ],
144 [ [ 'restore' , [ 'nolimit' ], undef ], 60 , 'specific default limit with privileges on / (restore)' ],
145 [ [ 'restore' , [ 'nolimit' ], 0 ], 0 , 'specific default limit with privileges on /, passing unlimited (restore)' ],
146 [ [ 'unknown' , [ 'd50m40r30' ], 0 ], 0 , 'storage default limit with privileges on /, passing unlimited' ],
147 [ [ 'unknown' , [ 'd50m40r30' ], undef ], 50 , 'storage default limit with privileges on /' ],
148 [ [ 'unknown' , [ 'd50m40r30' ], 0 ], 0 , 'storage default limit with privileges on, passing unlimited /' ],
149 [ [ 'move' , [ 'd50m40r30' ], undef ], 40 , 'specific storage limit with privileges on / (move)' ],
150 [ [ 'move' , [ 'd50m40r30' ], 0 ], 0 , 'specific storage limit with privileges on, passing unlimited / (move)' ],
151 [ [ 'restore' , [ 'd50m40r30' ], undef ], 30 , 'specific storage limit with privileges on / (restore)' ],
152 [ [ 'restore' , [ 'd50m40r30' ], 0 ], 0 , 'specific storage limit with privileges on /, passing unlimited (restore)' ],
154 [ user
=> 'user4 @test ' ],
155 [ [ 'unknown' , [ 'nolimit' ], 10 ], 10 , 'generic default limit with privileges on a different storage, passing lower override' ],
156 [ [ 'unknown' , [ 'nolimit' ], undef ], 100 , 'generic default limit with privileges on a different storage' ],
157 [ [ 'unknown' , [ 'nolimit' ], 0 ], 100 , 'generic default limit with privileges on a different storage, passing unlimited' ],
158 [ [ 'move' , [ 'nolimit' ], undef ], 80 , 'specific default limit with privileges on a different storage (move)' ],
159 [ [ 'restore' , [ 'nolimit' ], undef ], 60 , 'specific default limit with privileges on a different storage (restore)' ],
160 [ [ 'unknown' , [ 'd50m40r30' ], undef ], 50 , 'storage default limit with privileges on a different storage' ],
161 [ [ 'move' , [ 'd50m40r30' ], undef ], 40 , 'specific storage limit with privileges on a different storage (move)' ],
162 [ [ 'restore' , [ 'd50m40r30' ], undef ], 30 , 'specific storage limit with privileges on a different storage (restore)' ],
163 [ [ 'unknown' , [ 'd20m40r30' ], undef ], 20 , 'storage default limit with privileges on that storage' ],
164 [ [ 'unknown' , [ 'd20m40r30' ], 0 ], 0 , 'storage default limit with privileges on that storage, passing unlimited' ],
165 [ [ 'move' , [ 'd20m40r30' ], undef ], 40 , 'specific storage limit with privileges on that storage (move)' ],
166 [ [ 'move' , [ 'd20m40r30' ], 0 ], 0 , 'specific storage limit with privileges on that storage, passing unlimited (move)' ],
167 [ [ 'move' , [ 'd20m40r30' ], 10 ], 10 , 'specific storage limit with privileges on that storage, passing low override (move)' ],
168 [ [ 'move' , [ 'd20m40r30' ], 300 ], 300 , 'specific storage limit with privileges on that storage, passing high override (move)' ],
169 [ [ 'restore' , [ 'd20m40r30' ], undef ], 30 , 'specific storage limit with privileges on that storage (restore)' ],
170 [ [ 'restore' , [ 'd20m40r30' ], 0 ], 0 , 'specific storage limit with privileges on that storage, passing unlimited (restore)' ],
171 [ [ 'unknown' , [ 'd50m40r30' , 'd20m40r30' ], 0 ], 50 , 'multiple storages default limit with privileges on one of them, passing unlimited' ],
172 [ [ 'move' , [ 'd50m40r30' , 'd20m40r30' ], 0 ], 40 , 'multiple storages specific limit with privileges on one of them, passing unlimited (move)' ],
173 [ [ 'restore' , [ 'd50m40r30' , 'd20m40r30' ], 0 ], 30 , 'multiple storages specific limit with privileges on one of them, passing unlimited (restore)' ],
174 [ [ 'unknown' , [ 'd50m40r30' , 'd20m40r30' ], undef ], 20 , 'multiple storages default limit with privileges on one of them' ],
175 [ [ 'unknown' , [ 'd10' , 'd20m40r30' ], undef ], 10 , 'multiple storages default limit with privileges on one of them (storage limited)' ],
176 [ [ 'move' , [ 'd10' , 'd20m40r30' ], undef ], 10 , 'multiple storages specific limit with privileges on one of them (storage limited) (move)' ],
177 [ [ 'restore' , [ 'd10' , 'd20m40r30' ], undef ], 10 , 'multiple storages specific limit with privileges on one of them (storage limited) (restore)' ],
178 [ [ 'restore' , [ 'd10' , 'd20m40r30' ], 5 ], 5 , 'multiple storages specific limit (storage limited) (restore), passing lower override' ],
179 [ [ 'restore' , [ 'd200' , 'd200m400r300' ], 65 ], 65 , 'multiple storages specific limit (storage limited) (restore), passing lower override' ],
180 [ [ 'restore' , [ 'd200' , 'd200m400r300' ], 400 ], 200 , 'multiple storages specific limit (storage limited) (restore), passing higher override' ],
181 [ [ 'restore' , [ 'd200' , 'd200m400r300' ], 0 ], 200 , 'multiple storages specific limit (storage limited) (restore), passing unlimited' ],
182 [ [ 'restore' , [ 'd200' , 'd200m400r300' ], 1 ], 1 , 'multiple storages specific limit (storage limited) (restore), passing 1' ],
183 [ [ 'restore' , [ 'd10' , 'd20m40r30' ], 500 ], 10 , 'multiple storages specific limit with privileges on one of them (storage limited) (restore), passing higher override' ],
184 [ [ 'unknown' , [ 'nolimit' , 'd20m40r30' ], 0 ], 100 , 'multiple storages default limit with privileges on one of them, passing unlimited (default limited)' ],
185 [ [ 'move' , [ 'nolimit' , 'd20m40r30' ], 0 ], 80 , 'multiple storages specific limit with privileges on one of them, passing unlimited (default limited) (move)' ],
186 [ [ 'restore' , [ 'nolimit' , 'd20m40r30' ], 0 ], 60 , 'multiple storages specific limit with privileges on one of them, passing unlimited (default limited) (restore)' ],
187 [ [ 'unknown' , [ 'nolimit' , 'd20m40r30' ], undef ], 20 , 'multiple storages default limit with privileges on one of them (default limited)' ],
188 [ [ 'move' , [ 'nolimit' , 'd20m40r30' ], undef ], 40 , 'multiple storages specific limit with privileges on one of them (default limited) (move)' ],
189 [ [ 'restore' , [ 'nolimit' , 'd20m40r30' ], undef ], 30 , 'multiple storages specific limit with privileges on one of them (default limited) (restore)' ],
190 [ [ 'restore' , [ 'd20m40r30' , 'm50' ], 200 ], 60 , 'multiple storages specific limit with privileges on one of them (global default limited) (restore)' ],
191 [ [ 'move' , [ 'nolimit' , undef ], 40 ] , 40 , 'multiple storages one undefined, passing 40 (move)' ],
194 foreach my $t ( @tests ) {
195 my ( $args, $expected, $description ) = @$t ;
197 if ( $args eq 'user' ) {
198 $rpcenv -> set_user ( $expected );
200 die "not a test specification \n " ;
204 is ( PVE
:: Storage
:: get_bandwidth_limit
( @$args ), $expected, $description );