From 2899c638c04907461024dff0d32c1cc57ae4b6d4 Mon Sep 17 00:00:00 2001
From: Joshua Harlow <harlowja@yahoo-inc.com>
Date: Fri, 14 Sep 2012 14:32:31 -0700
Subject: Add a basic signal test and write out all the signal information in
 one block instead of many.

---
 tests/unittests/test_signal.py | 46 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)
 create mode 100644 tests/unittests/test_signal.py

(limited to 'tests')

diff --git a/tests/unittests/test_signal.py b/tests/unittests/test_signal.py
new file mode 100644
index 00000000..02fd1ef1
--- /dev/null
+++ b/tests/unittests/test_signal.py
@@ -0,0 +1,46 @@
+"""Tests for handling of signals within cloud init."""
+
+import os
+import subprocess
+import sys
+import time
+
+from StringIO import StringIO
+
+from mocker import MockerTestCase
+
+
+class TestSignal(MockerTestCase):
+
+    def test_signal_output(self):
+
+        # This is done since nose/unittest is actually setting up
+        # output capturing, signal handling itself, and its easier
+        # to just call out to cloudinit with a loop and see what the result is
+        run_what = [sys.executable, 
+                    '-c', ('import time; from cloudinit import signal_handler;'
+                           'signal_handler.attach_handlers(); time.sleep(120)')]
+
+        pc_info = subprocess.Popen(run_what, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
+
+        # Let it start up
+        time.sleep(0.5)
+        dead = None
+        while dead is None:
+            pc_info.terminate()
+            # Ok not dead yet. try again
+            time.sleep(0.5)
+            dead = pc_info.poll()
+
+        outputs = StringIO()
+        if pc_info.stdout:
+            outputs.write(pc_info.stdout.read())
+        if pc_info.stderr:
+            outputs.write(pc_info.stderr.read())
+        val = outputs.getvalue()
+        print val
+
+        # Check some of the outputs that should of happened
+        self.assertEquals(1, pc_info.wait())
+        self.assertTrue(len(val) != 0)
+        self.assertTrue(val.find("terminated") != -1)
-- 
cgit v1.2.3