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