xref: /aosp_15_r20/external/rappor/bin/sum_bits_test.py (revision 2abb31345f6c95944768b5222a9a5ed3fc68cc00)
1*2abb3134SXin Li#!/usr/bin/python -S
2*2abb3134SXin Li#
3*2abb3134SXin Li# Copyright 2014 Google Inc. All rights reserved.
4*2abb3134SXin Li#
5*2abb3134SXin Li# Licensed under the Apache License, Version 2.0 (the "License");
6*2abb3134SXin Li# you may not use this file except in compliance with the License.
7*2abb3134SXin Li# You may obtain a copy of the License at
8*2abb3134SXin Li#
9*2abb3134SXin Li#     http://www.apache.org/licenses/LICENSE-2.0
10*2abb3134SXin Li#
11*2abb3134SXin Li# Unless required by applicable law or agreed to in writing, software
12*2abb3134SXin Li# distributed under the License is distributed on an "AS IS" BASIS,
13*2abb3134SXin Li# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*2abb3134SXin Li# See the License for the specific language governing permissions and
15*2abb3134SXin Li# limitations under the License.
16*2abb3134SXin Li
17*2abb3134SXin Li"""
18*2abb3134SXin Lisum_bits_test.py: Tests for sum_bits.py
19*2abb3134SXin Li"""
20*2abb3134SXin Li
21*2abb3134SXin Liimport cStringIO
22*2abb3134SXin Liimport unittest
23*2abb3134SXin Li
24*2abb3134SXin Liimport rappor
25*2abb3134SXin Liimport sum_bits  # module under test
26*2abb3134SXin Li
27*2abb3134SXin Li
28*2abb3134SXin LiCSV_IN = """\
29*2abb3134SXin Liuser_id,cohort,bloom,prr,rappor
30*2abb3134SXin Li5,1,dummy,dummy,0000111100001111
31*2abb3134SXin Li5,1,dummy,dummy,0000000000111100
32*2abb3134SXin Li"""
33*2abb3134SXin Li
34*2abb3134SXin Li# NOTE: bit order is reversed.
35*2abb3134SXin LiEXPECTED_CSV_OUT = """\
36*2abb3134SXin Li0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r
37*2abb3134SXin Li2,1,1,2,2,1,1,0,0,1,1,1,1,0,0,0,0\r
38*2abb3134SXin Li"""
39*2abb3134SXin Li
40*2abb3134SXin LiTOO_MANY_COLUMNS = """\
41*2abb3134SXin Liuser_id,cohort,rappor
42*2abb3134SXin Li5,1,0000111100001111,extra
43*2abb3134SXin Li"""
44*2abb3134SXin Li
45*2abb3134SXin Li
46*2abb3134SXin Liclass SumBitsTest(unittest.TestCase):
47*2abb3134SXin Li
48*2abb3134SXin Li  def setUp(self):
49*2abb3134SXin Li    self.params = rappor.Params()
50*2abb3134SXin Li    self.params.num_bloombits = 16
51*2abb3134SXin Li    self.params.num_cohorts = 2
52*2abb3134SXin Li
53*2abb3134SXin Li  def testSum(self):
54*2abb3134SXin Li    stdin = cStringIO.StringIO(CSV_IN)
55*2abb3134SXin Li    stdout = cStringIO.StringIO()
56*2abb3134SXin Li
57*2abb3134SXin Li    sum_bits.SumBits(self.params, stdin, stdout)
58*2abb3134SXin Li
59*2abb3134SXin Li    self.assertMultiLineEqual(EXPECTED_CSV_OUT, stdout.getvalue())
60*2abb3134SXin Li
61*2abb3134SXin Li  def testErrors(self):
62*2abb3134SXin Li    stdin = cStringIO.StringIO(TOO_MANY_COLUMNS)
63*2abb3134SXin Li    stdout = cStringIO.StringIO()
64*2abb3134SXin Li
65*2abb3134SXin Li    self.assertRaises(
66*2abb3134SXin Li        RuntimeError, sum_bits.SumBits, self.params, stdin, stdout)
67*2abb3134SXin Li
68*2abb3134SXin Li
69*2abb3134SXin Liif __name__ == '__main__':
70*2abb3134SXin Li  unittest.main()
71