def real_view_fn(request): try: profile = UserProfile.objects.get(username=request.user.username) ans = view_fn(request, profile, *args, **kwargs) template_name = ans[0] context_dict = ans[1] if template_name == "redirect": path = context_dict return HttpResponseRedirect(JeevesLib.concretize(profile, path)) concretizeState = JeevesLib.jeevesState.policyenv.getNewSolverState(profile) def concretize(val): return concretizeState.concretizeExp(val, JeevesLib.jeevesState.pathenv.getEnv()) add_to_context(context_dict, request, template_name, profile, concretize) return render_to_response(template_name, RequestContext(request, context_dict)) except Exception: import traceback traceback.print_exc() raise finally: # Clear concretization cache. JeevesLib.clear_cache()
def real_view_fn(request): try: profile = UserProfile.objects.get(username=request.user.username) ans = view_fn(request, profile, *args, **kwargs) template_name = ans[0] context_dict = ans[1] if template_name == "redirect": path = context_dict return HttpResponseRedirect(JeevesLib.concretize( profile, path)) concretizeState = JeevesLib.jeevesState.policyenv.getNewSolverState( profile) def concretize(val): return concretizeState.concretizeExp( val, JeevesLib.jeevesState.pathenv.getEnv()) add_to_context(context_dict, request, template_name, profile, concretize) return render_to_response(template_name, RequestContext(request, context_dict)) except Exception: import traceback traceback.print_exc() raise finally: # Clear concretization cache. JeevesLib.clear_cache()
def test_scope(self): JeevesLib.clear_cache() x = JeevesLib.mkLabel('x') JeevesLib.restrict(x, lambda ctxt : ctxt) y = 5 def awesome_function(): y = 7 if x: return 30 y = 19 return 17 z = awesome_function() self.assertEqual(JeevesLib.concretize(True, y), 5) self.assertEqual(JeevesLib.concretize(False, y), 5) self.assertEqual(JeevesLib.concretize(True, z), 30) self.assertEqual(JeevesLib.concretize(False, z), 17) self.assertEqual(JeevesLib.concretize(True, y), 5) self.assertEqual(JeevesLib.concretize(False, y), 5) self.assertEqual(JeevesLib.concretize(True, z), 30) self.assertEqual(JeevesLib.concretize(False, z), 17)
def test_scope(self): JeevesLib.clear_cache() x = JeevesLib.mkLabel('x') JeevesLib.restrict(x, lambda ctxt: ctxt) y = 5 def awesome_function(): y = 7 if x: return 30 y = 19 return 17 z = awesome_function() self.assertEqual(JeevesLib.concretize(True, y), 5) self.assertEqual(JeevesLib.concretize(False, y), 5) self.assertEqual(JeevesLib.concretize(True, z), 30) self.assertEqual(JeevesLib.concretize(False, z), 17) self.assertEqual(JeevesLib.concretize(True, y), 5) self.assertEqual(JeevesLib.concretize(False, y), 5) self.assertEqual(JeevesLib.concretize(True, z), 30) self.assertEqual(JeevesLib.concretize(False, z), 17)
def test_restrict_all_restrictive(self): JeevesLib.clear_cache() x = JeevesLib.mkLabel('x') JeevesLib.restrict(x, lambda _: False) self.assertFalse(JeevesLib.concretize(None, x)) self.assertFalse(JeevesLib.concretize(None, x))
def test_restrict_all_permissive(self): JeevesLib.clear_cache() x = JeevesLib.mkLabel('x') JeevesLib.restrict(x, lambda _: True) self.assertTrue(JeevesLib.concretize(None, x)) # Now we test the cache. self.assertTrue(JeevesLib.concretize(None, x)) self.assertEqual(len(JeevesLib.get_cache()), 1)
def test_restrict_with_context(self): JeevesLib.clear_cache() x = JeevesLib.mkLabel('x') JeevesLib.restrict(x, lambda y: y == 2) self.assertTrue(JeevesLib.concretize(2, x)) self.assertTrue(JeevesLib.concretize(2, x)) self.assertFalse(JeevesLib.concretize(3, x)) self.assertFalse(JeevesLib.concretize(3, x))
def test_restrict_with_sensitive_value(self): JeevesLib.clear_cache() x = JeevesLib.mkLabel('x') JeevesLib.restrict(x, lambda y: y == 2) value = JeevesLib.mkSensitive(x, 42, 41) self.assertEquals(JeevesLib.concretize(2, value), 42) self.assertEquals(JeevesLib.concretize(2, value), 42) self.assertEquals(JeevesLib.concretize(1, value), 41) self.assertEquals(JeevesLib.concretize(1, value), 41) self.assertEquals(len(JeevesLib.get_cache()), 2)
def test_jmap_for(self): JeevesLib.clear_cache() x = JeevesLib.mkLabel('x') JeevesLib.restrict(x, lambda ctxt: ctxt) l = JeevesLib.mkSensitive(x, [0, 1, 2], [3, 4, 5, 6]) m = 0 for t in l: m = m + t * t self.assertEqual(JeevesLib.concretize(True, m), 5) self.assertEqual(JeevesLib.concretize(False, m), 86) self.assertEqual(JeevesLib.concretize(True, m), 5) self.assertEqual(JeevesLib.concretize(False, m), 86)
def test_jmap_for(self): JeevesLib.clear_cache() x = JeevesLib.mkLabel('x') JeevesLib.restrict(x, lambda ctxt : ctxt) l = JeevesLib.mkSensitive(x, [0,1,2], [3,4,5,6]) m = 0 for t in l: m = m + t*t self.assertEqual(JeevesLib.concretize(True, m), 5) self.assertEqual(JeevesLib.concretize(False, m), 86) self.assertEqual(JeevesLib.concretize(True, m), 5) self.assertEqual(JeevesLib.concretize(False, m), 86)
def test_restrict_under_conditional(self): JeevesLib.clear_cache() x = JeevesLib.mkLabel('x') value = JeevesLib.mkSensitive(x, 42, 0) if value == 42: JeevesLib.restrict(x, lambda ctxt: ctxt == 1) self.assertEquals(JeevesLib.concretize(0, value), 0) self.assertEquals(JeevesLib.concretize(0, value), 0) self.assertEquals(JeevesLib.concretize(1, value), 42) self.assertEquals(JeevesLib.concretize(1, value), 42) y = JeevesLib.mkLabel('y') value = JeevesLib.mkSensitive(y, 43, 0) if value == 42: JeevesLib.restrict(y, lambda ctxt: ctxt == 1) self.assertEquals(JeevesLib.concretize(0, value), 43) self.assertEquals(JeevesLib.concretize(0, value), 43) self.assertEquals(JeevesLib.concretize(1, value), 43) self.assertEquals(JeevesLib.concretize(1, value), 43)
def test_restrict_under_conditional(self): JeevesLib.clear_cache() x = JeevesLib.mkLabel('x') value = JeevesLib.mkSensitive(x, 42, 0) if value == 42: JeevesLib.restrict(x, lambda ctxt : ctxt == 1) self.assertEquals(JeevesLib.concretize(0, value), 0) self.assertEquals(JeevesLib.concretize(0, value), 0) self.assertEquals(JeevesLib.concretize(1, value), 42) self.assertEquals(JeevesLib.concretize(1, value), 42) y = JeevesLib.mkLabel('y') value = JeevesLib.mkSensitive(y, 43, 0) if value == 42: JeevesLib.restrict(y, lambda ctxt : ctxt == 1) self.assertEquals(JeevesLib.concretize(0, value), 43) self.assertEquals(JeevesLib.concretize(0, value), 43) self.assertEquals(JeevesLib.concretize(1, value), 43) self.assertEquals(JeevesLib.concretize(1, value), 43)
def test_jmap(self): JeevesLib.clear_cache() x = JeevesLib.mkLabel('x') JeevesLib.restrict(x, lambda ctxt: ctxt) l = JeevesLib.mkSensitive(x, [0, 1, 2], [3, 4, 5, 6]) m = [x * x for x in l] self.assertEqual(JeevesLib.concretize(True, m[0]), 0) self.assertEqual(JeevesLib.concretize(True, m[1]), 1) self.assertEqual(JeevesLib.concretize(True, m[2]), 4) self.assertEqual(JeevesLib.concretize(False, m[0]), 9) self.assertEqual(JeevesLib.concretize(False, m[1]), 16) self.assertEqual(JeevesLib.concretize(False, m[2]), 25) self.assertEqual(JeevesLib.concretize(False, m[3]), 36) self.assertEqual(JeevesLib.concretize(True, m[0]), 0) self.assertEqual(JeevesLib.concretize(True, m[1]), 1) self.assertEqual(JeevesLib.concretize(True, m[2]), 4) self.assertEqual(JeevesLib.concretize(False, m[0]), 9) self.assertEqual(JeevesLib.concretize(False, m[1]), 16) self.assertEqual(JeevesLib.concretize(False, m[2]), 25) self.assertEqual(JeevesLib.concretize(False, m[3]), 36)
def test_jmap(self): JeevesLib.clear_cache() x = JeevesLib.mkLabel('x') JeevesLib.restrict(x, lambda ctxt : ctxt) l = JeevesLib.mkSensitive(x, [0,1,2], [3,4,5,6]) m = [x*x for x in l] self.assertEqual(JeevesLib.concretize(True, m[0]), 0) self.assertEqual(JeevesLib.concretize(True, m[1]), 1) self.assertEqual(JeevesLib.concretize(True, m[2]), 4) self.assertEqual(JeevesLib.concretize(False, m[0]), 9) self.assertEqual(JeevesLib.concretize(False, m[1]), 16) self.assertEqual(JeevesLib.concretize(False, m[2]), 25) self.assertEqual(JeevesLib.concretize(False, m[3]), 36) self.assertEqual(JeevesLib.concretize(True, m[0]), 0) self.assertEqual(JeevesLib.concretize(True, m[1]), 1) self.assertEqual(JeevesLib.concretize(True, m[2]), 4) self.assertEqual(JeevesLib.concretize(False, m[0]), 9) self.assertEqual(JeevesLib.concretize(False, m[1]), 16) self.assertEqual(JeevesLib.concretize(False, m[2]), 25) self.assertEqual(JeevesLib.concretize(False, m[3]), 36)
def test_jlist(self): JeevesLib.clear_cache() x = JeevesLib.mkLabel('x') JeevesLib.restrict(x, lambda ctxt : ctxt) l = JeevesLib.mkSensitive(x, [0,1,2], [3,4,5,6]) if x: l.append(10) else: l.append(11) self.assertEqual(JeevesLib.concretize(True, l[0]), 0) self.assertEqual(JeevesLib.concretize(True, l[1]), 1) self.assertEqual(JeevesLib.concretize(True, l[2]), 2) self.assertEqual(JeevesLib.concretize(True, l[3]), 10) self.assertEqual(JeevesLib.concretize(False, l[0]), 3) self.assertEqual(JeevesLib.concretize(False, l[1]), 4) self.assertEqual(JeevesLib.concretize(False, l[2]), 5) self.assertEqual(JeevesLib.concretize(False, l[3]), 6) self.assertEqual(JeevesLib.concretize(False, l[4]), 11) self.assertEqual(JeevesLib.concretize(True, l[0]), 0) self.assertEqual(JeevesLib.concretize(True, l[1]), 1) self.assertEqual(JeevesLib.concretize(True, l[2]), 2) self.assertEqual(JeevesLib.concretize(True, l[3]), 10) self.assertEqual(JeevesLib.concretize(False, l[0]), 3) self.assertEqual(JeevesLib.concretize(False, l[1]), 4) self.assertEqual(JeevesLib.concretize(False, l[2]), 5) self.assertEqual(JeevesLib.concretize(False, l[3]), 6) self.assertEqual(JeevesLib.concretize(False, l[4]), 11) if x: l[0] = 20 self.assertEqual(JeevesLib.concretize(True, l[0]), 20) self.assertEqual(JeevesLib.concretize(False, l[0]), 3) self.assertEqual(JeevesLib.concretize(True, l[0]), 20) self.assertEqual(JeevesLib.concretize(False, l[0]), 3)
def test_jlist(self): JeevesLib.clear_cache() x = JeevesLib.mkLabel('x') JeevesLib.restrict(x, lambda ctxt: ctxt) l = JeevesLib.mkSensitive(x, [0, 1, 2], [3, 4, 5, 6]) if x: l.append(10) else: l.append(11) self.assertEqual(JeevesLib.concretize(True, l[0]), 0) self.assertEqual(JeevesLib.concretize(True, l[1]), 1) self.assertEqual(JeevesLib.concretize(True, l[2]), 2) self.assertEqual(JeevesLib.concretize(True, l[3]), 10) self.assertEqual(JeevesLib.concretize(False, l[0]), 3) self.assertEqual(JeevesLib.concretize(False, l[1]), 4) self.assertEqual(JeevesLib.concretize(False, l[2]), 5) self.assertEqual(JeevesLib.concretize(False, l[3]), 6) self.assertEqual(JeevesLib.concretize(False, l[4]), 11) self.assertEqual(JeevesLib.concretize(True, l[0]), 0) self.assertEqual(JeevesLib.concretize(True, l[1]), 1) self.assertEqual(JeevesLib.concretize(True, l[2]), 2) self.assertEqual(JeevesLib.concretize(True, l[3]), 10) self.assertEqual(JeevesLib.concretize(False, l[0]), 3) self.assertEqual(JeevesLib.concretize(False, l[1]), 4) self.assertEqual(JeevesLib.concretize(False, l[2]), 5) self.assertEqual(JeevesLib.concretize(False, l[3]), 6) self.assertEqual(JeevesLib.concretize(False, l[4]), 11) if x: l[0] = 20 self.assertEqual(JeevesLib.concretize(True, l[0]), 20) self.assertEqual(JeevesLib.concretize(False, l[0]), 3) self.assertEqual(JeevesLib.concretize(True, l[0]), 20) self.assertEqual(JeevesLib.concretize(False, l[0]), 3)
def test_jfun(self): JeevesLib.clear_cache() x = JeevesLib.mkLabel('x') JeevesLib.restrict(x, lambda ctxt: ctxt) y = JeevesLib.mkSensitive(x, [1, 2, 3], [4, 5, 6, 7]) z = [x * x for x in y] self.assertEqual(JeevesLib.concretize(True, z[0]), 1) self.assertEqual(JeevesLib.concretize(True, z[1]), 4) self.assertEqual(JeevesLib.concretize(True, z[2]), 9) self.assertEqual(JeevesLib.concretize(False, z[0]), 16) self.assertEqual(JeevesLib.concretize(False, z[1]), 25) self.assertEqual(JeevesLib.concretize(False, z[2]), 36) self.assertEqual(JeevesLib.concretize(False, z[3]), 49) self.assertEqual(JeevesLib.concretize(True, z[0]), 1) self.assertEqual(JeevesLib.concretize(True, z[1]), 4) self.assertEqual(JeevesLib.concretize(True, z[2]), 9) self.assertEqual(JeevesLib.concretize(False, z[0]), 16) self.assertEqual(JeevesLib.concretize(False, z[1]), 25) self.assertEqual(JeevesLib.concretize(False, z[2]), 36) self.assertEqual(JeevesLib.concretize(False, z[3]), 49)
def test_jfun(self): JeevesLib.clear_cache() x = JeevesLib.mkLabel('x') JeevesLib.restrict(x, lambda ctxt : ctxt) y = JeevesLib.mkSensitive(x, [1,2,3], [4,5,6,7]) z = [x*x for x in y] self.assertEqual(JeevesLib.concretize(True, z[0]), 1) self.assertEqual(JeevesLib.concretize(True, z[1]), 4) self.assertEqual(JeevesLib.concretize(True, z[2]), 9) self.assertEqual(JeevesLib.concretize(False, z[0]), 16) self.assertEqual(JeevesLib.concretize(False, z[1]), 25) self.assertEqual(JeevesLib.concretize(False, z[2]), 36) self.assertEqual(JeevesLib.concretize(False, z[3]), 49) self.assertEqual(JeevesLib.concretize(True, z[0]), 1) self.assertEqual(JeevesLib.concretize(True, z[1]), 4) self.assertEqual(JeevesLib.concretize(True, z[2]), 9) self.assertEqual(JeevesLib.concretize(False, z[0]), 16) self.assertEqual(JeevesLib.concretize(False, z[1]), 25) self.assertEqual(JeevesLib.concretize(False, z[2]), 36) self.assertEqual(JeevesLib.concretize(False, z[3]), 49)