~ubuntu-branches/ubuntu/utopic/gridengine/utopic

« back to all changes in this revision

Viewing changes to source/libs/sgeobj/test_sge_resource_quota.c

  • Committer: Bazaar Package Importer
  • Author(s): Mark Hymers
  • Date: 2008-06-25 22:36:13 UTC
  • Revision ID: james.westby@ubuntu.com-20080625223613-tvd9xlhuoct9kyhm
Tags: upstream-6.2~beta2
ImportĀ upstreamĀ versionĀ 6.2~beta2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*___INFO__MARK_BEGIN__*/
 
2
/*************************************************************************
 
3
 *
 
4
 *  The Contents of this file are made available subject to the terms of
 
5
 *  the Sun Industry Standards Source License Version 1.2
 
6
 *
 
7
 *  Sun Microsystems Inc., March, 2001
 
8
 *
 
9
 *
 
10
 *  Sun Industry Standards Source License Version 1.2
 
11
 *  =================================================
 
12
 *  The contents of this file are subject to the Sun Industry Standards
 
13
 *  Source License Version 1.2 (the "License"); You may not use this file
 
14
 *  except in compliance with the License. You may obtain a copy of the
 
15
 *  License at http://gridengine.sunsource.net/Gridengine_SISSL_license.html
 
16
 *
 
17
 *  Software provided under this License is provided on an "AS IS" basis,
 
18
 *  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
 
19
 *  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
 
20
 *  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
 
21
 *  See the License for the specific provisions governing your rights and
 
22
 *  obligations concerning the Software.
 
23
 *
 
24
 *   The Initial Developer of the Original Code is: Sun Microsystems, Inc.
 
25
 *
 
26
 *   Copyright: 2001 by Sun Microsystems, Inc.
 
27
 *
 
28
 *   All Rights Reserved.
 
29
 *
 
30
 ************************************************************************/
 
31
/*___INFO__MARK_END__*/
 
32
 
 
33
#include "sge_all_listsL.h"
 
34
#include "sgermon.h"
 
35
#include "sge_bootstrap.h"
 
36
#include "sge_hgroup.h"
 
37
#include "sge_href.h"
 
38
#include "sge_userset.h"
 
39
#include "sge_resource_quota.h"
 
40
 
 
41
typedef struct {
 
42
   const char* users;
 
43
   const char* group;
 
44
   const char* projects;
 
45
   const char* pes;
 
46
   const char* hosts;
 
47
   const char* queues;
 
48
} filter_t;
 
49
 
 
50
typedef struct {
 
51
   filter_t rule;
 
52
   filter_t query;
 
53
   bool last;
 
54
} filter_test_t;
 
55
 
 
56
int main(int argc, char *argv[])
 
57
{
 
58
   int pos_tests_failed = 0;
 
59
   int neg_tests_failed = 0;
 
60
   int i = 0;
 
61
   lListElem *filter;
 
62
 
 
63
   filter_test_t positiv_test[] = {
 
64
   /* simple search */
 
65
      {{"user1,user2,user3", NULL, NULL, NULL, NULL, NULL}, {"user3", "staff", "*", "*", "*", "*"}, false},
 
66
      {{NULL, NULL, "project1,project2,project3", NULL, NULL, NULL}, {"*", "staff", "project2", "*", "*", "*"}, false},
 
67
      {{NULL, NULL, NULL, "pe1,pe2,pe3", NULL, NULL}, {"*", "staff", "*", "pe3", "*", "*"}, false},
 
68
      {{NULL, NULL, NULL, NULL, "h1,h2,h3", NULL}, {"*", "staff", "*", "*", "h3", "*"}, false},
 
69
      {{NULL, NULL, NULL, NULL, NULL, "queue1,queue2,queue3"}, {"*", "staff", "*", "*", "*", "queue1"}, false},
 
70
   /* wildcard search */
 
71
      {{"user1,user2,user3", NULL, NULL, NULL, NULL, NULL}, {"user*", "*", "staff", "*", "*", "*"}, false},
 
72
      {{NULL, NULL, "project1,project2,project3", NULL, NULL, NULL}, {"*", "staff", "project*", "*", "*", "*"}, false},
 
73
      {{NULL, NULL, NULL, "pe1,pe2,pe3", NULL, NULL}, {"*", "staff", "*", "pe*", "*", "*"}, false},
 
74
      {{NULL, NULL, NULL, NULL, "h1,h2,h3", NULL}, {"*", "staff", "*", "*", "h*", "*"}, false},
 
75
      {{NULL, NULL, NULL, NULL, NULL, "queue1,queue2,queue3"}, {"*", "staff", "*", "*", "*", "que*"}, false},
 
76
   /* wildcard definition */
 
77
      {{"user*", NULL, NULL, NULL, NULL, NULL}, {"user3", "staff", "*", "*", "*", "*"}, false},
 
78
      {{NULL, NULL, "project*", NULL, NULL, NULL}, {"*", "staff", "project2", "*", "*", "*"}, false},
 
79
      {{NULL, NULL, NULL, "pe*", NULL, NULL}, {"*", "staff", "*", "pe3", "*", "*"}, false},
 
80
      {{NULL, NULL, NULL, NULL, "h*", NULL}, {"*", "staff", "*", "*", "h1", "*"}, false},
 
81
      {{NULL, NULL, NULL, NULL, NULL, "queue*"}, {"*", "staff", "*", "*", "*", "queue1"}, false},
 
82
   /* wildcard definition, wildcard search */
 
83
      {{"user*", NULL, NULL, NULL, NULL, NULL}, {"u*", "staff", "*", "*", "*", "*"}, false},
 
84
      {{NULL, NULL, "project*", NULL, NULL, NULL}, {"*", "staff", "pro*", "*", "*", "*"}, false},
 
85
      {{NULL, NULL, NULL, "pe*", NULL, NULL}, {"*", "staff", "*", "p*", "*", "*"}, false},
 
86
      {{NULL, NULL, NULL, NULL, "host*", NULL}, {"*", "staff", "*", "*", "h*", "*"}, false},
 
87
      {{NULL, NULL, NULL, NULL, NULL, "queue*"}, {"*", "staff", "*", "*", "*", "qu*"}, false},
 
88
   /* hostgroup definition*/
 
89
      {{NULL, NULL, NULL, NULL, "@hgrp1", NULL}, {"*", "staff", "*", "*", "host1", "*"}, false},
 
90
      {{NULL, NULL, NULL, NULL, "@hgrp1", NULL}, {"*", "staff", "*", "*", "ho*", "*"}, false},
 
91
      {{NULL, NULL, NULL, NULL, "@hgr*", NULL}, {"*", "staff", "*", "*", "host1", "*"}, false},
 
92
      {{NULL, NULL, NULL, NULL, "@hgr*", NULL}, {"*", "staff", "*", "*", "hos*", "*"}, false},
 
93
      {{NULL, NULL, NULL, NULL, "@hgrp1", NULL}, {"*", "staff", "*", "*", "@hgrp1", "*"}, false},
 
94
      {{NULL, NULL, NULL, NULL, "host1", NULL}, {"*", "staff", "*", "*", "@hgrp1", "*"}, false},
 
95
      {{NULL, NULL, NULL, NULL, "ho*", NULL}, {"*", "staff", "*", "*", "@hgrp1", "*"}, false},
 
96
      {{NULL, NULL, NULL, NULL, "host1", NULL}, {"*", "staff", "*", "*", "@hgrp*", "*"}, false},
 
97
      {{NULL, NULL, NULL, NULL, "ho*", NULL}, {"*", "staff", "*", "*", "@hgrp*", "*"}, false},
 
98
      {{NULL, NULL, NULL, NULL, "ho*", NULL}, {"*", "staff", "*", "*", "*", "*"}, false},
 
99
      {{NULL, NULL, NULL, NULL, "!@hgrp1", NULL}, {"*", "staff", "*", "*", "*", "*"}, false},
 
100
      {{NULL, NULL, NULL, NULL, "!@hgrp1", NULL}, {"*", "staff", "*", "*", "@hgrp*", "*"}, false},
 
101
   /* userset definition */
 
102
      {{"@userset1", NULL, NULL, NULL, NULL, NULL}, {"user1", "staff", "*", "*", "*", "*"}, false},
 
103
      {{"@userset1", NULL, NULL, NULL, NULL, NULL}, {"use*", "staff", "*", "*", "*", "*"}, false},
 
104
      {{"@users*", NULL, NULL, NULL, NULL, NULL}, {"user1", "staff", "*", "*", "*", "*"}, false},
 
105
      {{"@users*", NULL, NULL, NULL, NULL, NULL}, {"user*", "staff", "*", "*", "*", "*"}, false},
 
106
      {{"user1", NULL, NULL, NULL, NULL, NULL}, {"@userset1", "staff", "*", "*", "*", "*"}, false},
 
107
      {{"us*", NULL, NULL, NULL, NULL, NULL}, {"@userset1", "staff", "*", "*", "*", "*"}, false},
 
108
      {{"user1", NULL, NULL, NULL, NULL, NULL}, {"@use*", "staff", "*", "*", "*", "*"}, false},
 
109
      {{"use*", NULL, NULL, NULL, NULL, NULL}, {"@use*", "staff", "*", "*", "*", "*"}, false},
 
110
      {{"@user*2", NULL, NULL, NULL, NULL, NULL}, {"user1", "staff", "*", "*", "*", "*"}, false},
 
111
      {{"@user*2", NULL, NULL, NULL, NULL, NULL}, {"user1", "*", "*", "*", "*", "*"}, false},
 
112
      {{"!@user*", NULL, NULL, NULL, NULL, NULL}, {"*", "*", "*", "*", "*", "*"}, false},
 
113
   /* project definition */
 
114
      {{NULL, NULL, "!*", NULL, NULL, NULL}, {"*", "staff", NULL, "*", "*", "*"}, false},
 
115
   /* end test */
 
116
      {{NULL, NULL, NULL, NULL, NULL, NULL}, {"*", "staff", "*", "*", "*", "*"}, true},
 
117
   };
 
118
 
 
119
   filter_test_t negativ_test[] = {
 
120
   /* simple search */
 
121
      {{"*,!user3", NULL, NULL, NULL, NULL, NULL}, {"user3", "staff", "*", "*", "*", "*"}, false},
 
122
      {{"user1,user2", NULL, NULL, NULL, NULL, NULL}, {"user3", "staff", "*", "*", "*", "*"}, false},
 
123
      {{NULL, NULL, "*,!project2", NULL, NULL, NULL}, {"*", "staff", "project2", "*", "*", "*"}, false},
 
124
      {{NULL, NULL, "project1,project3", NULL, NULL, NULL}, {"*", "staff", "project2", "*", "*", "*"}, false},
 
125
      {{NULL, NULL, NULL, "*,!pe3", NULL, NULL}, {"*", "staff", "*", "pe3", "*", "*"}, false},
 
126
      {{NULL, NULL, NULL, "pe1,pe2", NULL, NULL}, {"*", "staff", "*", "pe3", "*", "*"}, false},
 
127
      {{NULL, NULL, NULL, NULL, "*,!h3", NULL}, {"*", "staff", "*", "*", "h3", "*"}, false},
 
128
      {{NULL, NULL, NULL, NULL, "h1,h2", NULL}, {"*", "staff", "*", "*", "h3", "*"}, false},
 
129
      {{NULL, NULL, NULL, NULL, NULL, "*,!queue1"}, {"*", "staff", "*", "*", "*", "queue1"}, false},
 
130
      {{NULL, NULL, NULL, NULL, NULL, "queue2,queue3"}, {"*", "staff", "*", "*", "*", "queue1"}, false},
 
131
   /* wildcard definition, wildcard search */
 
132
      {{"!us*", NULL, NULL, NULL, NULL, NULL}, {"user*", "staff", "*", "*", "*", "*"}, false},
 
133
      {{NULL, NULL, "!pro*", NULL, NULL, NULL}, {"*", "staff", "project*", "*", "*", "*"}, false},
 
134
      {{NULL, NULL, NULL, "!p*", NULL, NULL}, {"*", "staff", "*", "pe*", "*", "*"}, false},
 
135
      {{NULL, NULL, NULL, NULL, "!h*", NULL}, {"*", "staff", "*", "*", "hos*", "*"}, false},
 
136
      {{NULL, NULL, NULL, NULL, NULL, "!qu*"}, {"*", "staff", "*", "*", "*", "que*"}, false},
 
137
   /* hostgroup definition*/
 
138
      {{NULL, NULL, NULL, NULL, "!@hgrp1", NULL}, {"*", "staff", "*", "*", "host1", "*"}, false},
 
139
      {{NULL, NULL, NULL, NULL, "!@hgrp1", NULL}, {"*", "staff", "*", "*", "ho*", "*"}, false},
 
140
      {{NULL, NULL, NULL, NULL, "!@hgr*", NULL}, {"*", "staff", "*", "*", "host1", "*"}, false},
 
141
      {{NULL, NULL, NULL, NULL, "!@hgr*", NULL}, {"*", "staff", "*", "*", "hos*", "*"}, false},
 
142
      {{NULL, NULL, NULL, NULL, "!hgrp1", NULL}, {"*", "staff", "*", "*", "hgrp1", "*"}, false},
 
143
      {{NULL, NULL, NULL, NULL, "!hgrp*", NULL}, {"*", "staff", "*", "*", "hgrp*", "*"}, false},
 
144
   /* userset definition */
 
145
      {{"!@userset1", NULL, NULL, NULL, NULL, NULL}, {"user1", "staff", "*", "*", "*", "*"}, false},
 
146
      {{"!@userset1", NULL, NULL, NULL, NULL, NULL}, {"use*", "staff", "*", "*", "*", "*"}, false},
 
147
      {{"!@users*", NULL, NULL, NULL, NULL, NULL}, {"user1", "staff", "*", "*", "*", "*"}, false},
 
148
      {{"!@users*", NULL, NULL, NULL, NULL, NULL}, {"user*", "staff", "*", "*", "*", "*"}, false},
 
149
      {{"!@userset2", NULL, NULL, NULL, NULL, NULL}, {"user1", "staff", "*", "*", "*", "*"}, false},
 
150
      {{"@userset1,!@userset2", NULL, NULL, NULL, NULL, NULL}, {"user1", "staff", "*", "*", "*", "*"}, false},
 
151
      {{"@user*2", NULL, NULL, NULL, NULL, NULL}, {"user1", NULL, "*", "*", "*", "*"}, false},
 
152
   /* project definition */
 
153
      {{NULL, NULL, "*", NULL, NULL, NULL}, {"*", "staff", NULL, "*", "*", "*"}, false},
 
154
      {{NULL, NULL, "!*", NULL, NULL, NULL}, {"*", "staff", "project1", "*", "*", "*"}, false},
 
155
   /* end test */
 
156
      {{"!*", NULL, NULL, NULL, NULL, NULL}, {"*", "staff", "*", "*", "*", "*"}, true},
 
157
   };
 
158
 
 
159
   lList *hgroup_list;
 
160
   lListElem *hgroup;
 
161
   lList *userset_list;
 
162
   lListElem *userset;
 
163
 
 
164
   DENTER_MAIN(TOP_LAYER, "test_sge_resouce_quota");
 
165
 
 
166
   bootstrap_mt_init();
 
167
 
 
168
   lInit(nmv);
 
169
 
 
170
   hgroup_list = lCreateList("" , HGRP_Type);
 
171
   hgroup = lCreateElem(HGRP_Type);
 
172
   lSetHost(hgroup, HGRP_name, "@hgrp1");
 
173
   lAddSubHost(hgroup, HR_name, "host1", HGRP_host_list, HR_Type);
 
174
   lAppendElem(hgroup_list, hgroup);
 
175
   hgroup = lCreateElem(HGRP_Type);
 
176
   lSetHost(hgroup, HGRP_name, "@hgrp2");
 
177
   lAddSubHost(hgroup, HR_name, "host2", HGRP_host_list, HR_Type);
 
178
   lAppendElem(hgroup_list, hgroup);
 
179
 
 
180
   userset_list = lCreateList("", US_Type);
 
181
   userset = lCreateElem(US_Type);
 
182
   lSetString(userset, US_name, "userset1");
 
183
   lAddSubStr(userset, UE_name, "user1", US_entries, UE_Type);
 
184
   lAppendElem(userset_list, userset);
 
185
   userset = lCreateElem(US_Type);
 
186
   lSetString(userset, US_name, "userset2");
 
187
   lAddSubStr(userset, UE_name, "@staff", US_entries, UE_Type);
 
188
   lAppendElem(userset_list, userset);
 
189
 
 
190
   for (i=0; ; i++){
 
191
      lListElem *rule = lCreateElem(RQR_Type);
 
192
      filter_t rule_filter = positiv_test[i].rule;
 
193
      filter_t query_filter = positiv_test[i].query;
 
194
 
 
195
      if (rqs_parse_filter_from_string(&filter, rule_filter.users, NULL)) {
 
196
         lSetObject(rule, RQR_filter_users, filter);
 
197
      }
 
198
      if (rqs_parse_filter_from_string(&filter, rule_filter.projects, NULL)) {
 
199
         lSetObject(rule, RQR_filter_projects, filter);
 
200
      }
 
201
      if (rqs_parse_filter_from_string(&filter, rule_filter.pes, NULL)) {
 
202
         lSetObject(rule, RQR_filter_pes, filter);
 
203
      }
 
204
      if (rqs_parse_filter_from_string(&filter, rule_filter.hosts, NULL)) {
 
205
         lSetObject(rule, RQR_filter_hosts, filter);
 
206
      }
 
207
      if (rqs_parse_filter_from_string(&filter, rule_filter.queues, NULL)) {
 
208
         lSetObject(rule, RQR_filter_queues, filter);
 
209
      }
 
210
      if(!rqs_is_matching_rule(rule, query_filter.users, query_filter.group, query_filter.projects, 
 
211
                                query_filter.pes, query_filter.hosts, query_filter.queues,
 
212
                                userset_list, hgroup_list)) {
 
213
         printf("positiv filter matching failed (test %d)\n", i+1);
 
214
         pos_tests_failed++;
 
215
      }
 
216
      if (positiv_test[i].last == true) {
 
217
         break;
 
218
      }
 
219
      lFreeElem(&rule);
 
220
   }
 
221
   printf("%d positiv test(s) failed\n", pos_tests_failed);
 
222
 
 
223
   for (i=0; ; i++) {
 
224
      lListElem *rule = lCreateElem(RQR_Type);
 
225
      filter_t rule_filter = negativ_test[i].rule;
 
226
      filter_t query_filter = negativ_test[i].query;
 
227
 
 
228
      if (rqs_parse_filter_from_string(&filter, rule_filter.users, NULL)) {
 
229
         lSetObject(rule, RQR_filter_users, filter);
 
230
      }
 
231
      if (rqs_parse_filter_from_string(&filter, rule_filter.projects, NULL)) {
 
232
         lSetObject(rule, RQR_filter_projects, filter);
 
233
      }
 
234
      if (rqs_parse_filter_from_string(&filter, rule_filter.pes, NULL)) {
 
235
         lSetObject(rule, RQR_filter_pes, filter);
 
236
      }
 
237
      if (rqs_parse_filter_from_string(&filter, rule_filter.hosts, NULL)) {
 
238
         lSetObject(rule, RQR_filter_hosts, filter);
 
239
      }
 
240
      if (rqs_parse_filter_from_string(&filter, rule_filter.queues, NULL)) {
 
241
         lSetObject(rule, RQR_filter_queues, filter);
 
242
      }
 
243
      if (rqs_is_matching_rule(rule, query_filter.users, query_filter.group, query_filter.projects, 
 
244
                                query_filter.pes, query_filter.hosts, query_filter.queues,
 
245
                                userset_list, hgroup_list)) {
 
246
         printf("negativ filter matching failed (test %d)\n", i+1);
 
247
         
 
248
         neg_tests_failed++;
 
249
      }
 
250
 
 
251
      lFreeElem(&rule);
 
252
 
 
253
      if (negativ_test[i].last == true) {
 
254
         break;
 
255
      }
 
256
  }
 
257
 
 
258
  printf("%d negativ test(s) failed\n", neg_tests_failed);
 
259
  
 
260
  lFreeList(&hgroup_list);
 
261
  lFreeList(&userset_list);
 
262
 
 
263
  DRETURN(pos_tests_failed + neg_tests_failed);
 
264
}