source: examples/scaling_tests/daisychain/likes_python/base/QUERY.py @ 09531ca

mei_rt2mei_rt2_fix_1
Last change on this file since 09531ca was 646e57e, checked in by Mei <mei@…>, 12 years ago

1) add partial proof

  • Property mode set to 100755
File size: 5.0 KB
Line 
1#!/usr/bin/env python
2
3"""
4Run the queries described in README
5
6cmd: env ABAC_CN=1 keystore=`pwd` ./query.py
7
8"""
9
10import os
11import sys
12import ABAC
13import time
14import datetime
15import math
16
17debug=0
18
19ctxt = ABAC.Context()
20ctxt.set_no_partial_proof()
21
22cred_count = 2 + 2 * #VAL#
23
24def get_msec(e_time) :
25    msec_delta=0
26    if( int(e_time.seconds) !=0 ) :
27        msec_delta= int(e_time.seconds) *1000
28    if( int(e_time.microseconds) !=0) :
29        msec_delta = msec_delta + int(e_time.microseconds)/1000
30    return msec_delta
31
32def get_micro(e_time) :
33    micro_delta=0
34    if( int(e_time.seconds) !=0 ) :
35        micro_delta= int(e_time.seconds) *1000000
36    if( int(e_time.microseconds) !=0) :
37        micro_delta = micro_delta + int(e_time.microseconds)
38    return micro_delta
39
40def extract_delta(starttime, endtime) :
41    """ given a start time, and a endtime, extract delta """
42    elapsed_time = (endtime - starttime)
43# Only handle in seconds/microseconds
44    if ( int(elapsed_time.days) != 0 ) :
45        sys.stderr,write("%s is longer than a day !!!" % msg)
46        exit(1)
47    return elapsed_time
48
49
50# Keystore is the directory containing the principal credentials.
51# Load existing principals and/or policy credentials
52if (os.environ.has_key("keystore")) :
53    keystore=os.environ["keystore"]
54    starttime = datetime.datetime.now()
55    ctxt.load_directory(keystore)
56    endtime = datetime.datetime.now()
57    elapsed_load=extract_delta(starttime, endtime)
58    elapsed_msec=get_msec(elapsed_load)
59    sys.stderr.write("%d %d LOAD(msec)\n" % (cred_count,elapsed_msec))
60else:
61    print("keystore is not set...")
62    exit(1)
63
64##########################################################################
65# dump the loaded principals/policies
66#
67
68fd=os.open("creds_dump",os.O_WRONLY|os.O_CREAT)
69out = ctxt.context_principals()
70for x in out[1]:
71    os.write(fd, x.string())
72    os.write(fd,"\n")
73out = ctxt.context_credentials()
74for c in out[1]:
75    string="%s <- %s" % (c.head_string(), c.tail_string())
76    os.write(fd,string) 
77    os.write(fd,"\n")
78os.close(fd)
79
80##########################################################################
81# Does JohnX likes John0 ?
82# role = [keyid:JohnX].role:after
83# p [Keyid:john0]
84def goodQuery() :
85    aid="John%s_ID.pem"% #VAL#
86    aID=ABAC.ID(aid)
87    a=aID.id_keyid()
88
89    bID=ABAC.ID("John0_ID.pem")
90    b=bID.id_keyid()
91
92    role = ABAC.Role(a,"likes")
93    p = ABAC.Role(b)
94
95    print "\n===good============ johnN.likes <- john0 "
96    starttime = datetime.datetime.now()
97    out = ctxt.query(role, p)
98    endtime = datetime.datetime.now()
99    if(debug):
100        print "good query start-> %s\n" % starttime
101        print "good query end  -> %s\n" % endtime
102    for c in out[1]:
103        print "%s <- %s" % (c.head_string(), c.tail_string())
104    return extract_delta(starttime, endtime)
105   
106
107##########################################################################
108# Does John0 likes JohnX ?
109# role = [keyid:JohnX].role:after
110# p [Keyid:john0]
111def badQuery() :
112    bid="John%s_ID.pem"% #VAL#
113    bID=ABAC.ID(bid)
114    b=bID.id_keyid()
115
116    aID=ABAC.ID("John0_ID.pem")
117    a=aID.id_keyid()
118   
119    role = ABAC.Role(a,"likes")
120    p = ABAC.Role(b)
121   
122    print "\n===bad============ john0.likes <- johnX "
123    starttime = datetime.datetime.now()
124    out = ctxt.query(role, p)
125    endtime = datetime.datetime.now()
126    for c in out[1]:
127        print "%s <- %s" % (c.head_string(), c.tail_string())
128    return extract_delta(starttime, endtime)
129       
130##############################################################
131
132#skip the first one
133e_time=goodQuery()
134elapsed_micro=get_micro(e_time)
135sys.stderr.write("%d %d GOOD_f(micro)\n" % (cred_count,elapsed_micro))
136
137tlist=[]
138k=100
139while(k):
140    e_time=goodQuery()
141    elapsed_micro=get_micro(e_time)
142    k=k-1
143    tlist.append(elapsed_micro)
144    if(k==99):
145       sys.stderr.write("%d %d GOOD_s(micro)\n" % (cred_count,elapsed_micro))
146
147    if(debug):
148        sys.stderr.write("%d %d GOOD_%d(micro)\n" % (cred_count,elapsed_micro,k))
149
150sum=0
151for i in tlist:
152    sum=sum+i
153ave=sum/100
154dlist = [(x-ave) for x in tlist ]
155slist = [ (x-ave)*(x-ave) for x in tlist]
156sum=0
157for i in slist:
158    sum=sum+i
159sd=math.sqrt(sum/99)
160sys.stderr.write("%d %d %d GOOD_t(micro)\n" % (cred_count,ave,sd))
161sys.stderr.write("%d 100 %s GOOD_list(micro)\n" % (cred_count,tlist))
162
163
164###############################################################
165
166e_time=badQuery()
167elapsed_micro=get_micro(e_time)
168sys.stderr.write("%d %d BAD_f(micro)\n" % (cred_count,elapsed_micro))
169
170tlist=[]
171k=100
172while(k):
173    e_time=badQuery()
174    elapsed_micro=get_micro(e_time)
175    tlist.append(elapsed_micro)
176    k=k-1
177    if(k==99):
178        sys.stderr.write("%d %d BAD_s(micro)\n" % (cred_count,elapsed_micro))
179
180    if(debug):
181        sys.stderr.write("%d %d BAD_%d(micro)\n" % (cred_count,elapsed_micro,k))
182
183sum=0
184for i in tlist:
185    sum=sum+i
186ave=sum/100
187dlist = [(x-ave) for x in tlist ]
188slist = [ (x-ave)*(x-ave) for x in tlist]
189sum=0
190for i in slist:
191    sum=sum+i
192sd=math.sqrt(sum/99)
193sys.stderr.write("%d %d %d BAD_t(micro)\n" % (cred_count,ave, sd))
194sys.stderr.write("%d 100 %s BAD_list(micro)\n" % (cred_count,tlist))
Note: See TracBrowser for help on using the repository browser.