class TestEmitSamLink(unittest.TestCase): def setUp(self): self.map_ctx = map_context(None, None) self.count_group = "Test" self.logger = SavingLogger() self.monitor = HadoopEventMonitor(self.count_group, self.logger, self.map_ctx) self.emitter = EmitSamLink(self.map_ctx, self.monitor) # create two mappings, m1, m2. We put them in self.pair # m1 has: # name = first # tid = tid1 # m2 has: # name = second # tid = tid2 self.pair = [ SimpleMapping(), SimpleMapping() ] self.m1, self.m2 = self.pair self.m1.set_name("first") self.m1.tid = "tid1" self.m2.set_name("second") self.m2.tid = "tid2" def test_constructor_link(self): h = EmitSamLink(self.map_ctx, self.monitor) self.assertTrue(h.next_link is None) other = HitProcessorChainLink() h = EmitSamLink(self.map_ctx, self.monitor, other) self.assertEqual(other, h.next_link) def test_process(self): self.emitter.process(self.pair) self.assertEqual(["first", "second"], sorted(self.map_ctx.emitted.keys())) self.assertEqual(1, len(self.map_ctx.emitted["first"])) self.assertTrue(re.search("tid1", self.map_ctx.emitted["first"][0])) self.assertEqual(1, len(self.map_ctx.emitted["second"])) self.assertTrue(re.search("tid2", self.map_ctx.emitted["second"][0])) def test_emitted_type(self): self.emitter.process(self.pair) for k in self.map_ctx.emitted.keys(): self.assertTrue(isinstance(k, str)) for v in [ item for ary in self.map_ctx.emitted.values() for item in ary ]: self.assertTrue(isinstance(v, str)) def test_first_null(self): self.pair[0] = None self.emitter.process(self.pair) self.assertEqual(["second"], self.map_ctx.emitted.keys()) self.assertEqual(1, len(self.map_ctx.emitted["second"])) self.assertTrue(re.search("tid2", self.map_ctx.emitted["second"][0])) def test_second_null(self): self.pair[1] = None self.emitter.process(self.pair) self.assertEqual(["first"], self.map_ctx.emitted.keys()) self.assertEqual(1, len(self.map_ctx.emitted["first"])) self.assertTrue(re.search("tid1", self.map_ctx.emitted["first"][0])) def test_forward_pair(self): class Receiver(object): def process(self, pair): self.received = pair receiver = Receiver() self.emitter.set_next(receiver) self.emitter.process(self.pair) self.assertEqual(self.pair, receiver.received)