コード例 #1
0
ファイル: test_actions.py プロジェクト: jbiousse/alignak
    def test_huge_output(self):
        """ Test huge output

         We got problems on LARGE output, more than 64K in fact.
        We try to solve it with the fcntl and non blocking read instead of
        "communicate" mode. So here we try to get a 100K output. Should NOT be in a timeout

        :return: None
        """
        # Set max output length
        max_output_length = 131072

        a = Action()
        a.timeout = 15
        a.command = r"""python -u -c 'print("."*%d)'""" % max_output_length

        ###
        ### 1 - output is less than the max output
        ###
        # Run the action script
        a.execute()
        assert 'launched' == a.status

        # Wait action execution end and set the max output we want for the command
        self.wait_finished(a, size=max_output_length + 1)
        assert 0 == a.exit_status
        assert 'done' == a.status
        assert "." * max_output_length == a.output
        assert "" == a.long_output
        assert "" == a.perf_data

        ###
        ### 2 - output is equal to the max output
        ###
        # Run the action script
        a.execute()
        assert 'launched' == a.status

        # Wait action execution end and set the max output we want for the command
        self.wait_finished(a, size=max_output_length)
        assert 0 == a.exit_status
        assert 'done' == a.status
        assert "." * max_output_length == a.output
        assert "" == a.long_output
        assert "" == a.perf_data

        ###
        ### 3 - output is more than the max output
        ###
        # Run the action script
        a.execute()
        assert 'launched' == a.status

        # Wait action execution end and set the max output we want for the command
        self.wait_finished(a, size=max_output_length - 10)
        assert 0 == a.exit_status
        assert 'done' == a.status
        assert "." * (max_output_length - 10) == a.output
        assert "" == a.long_output
        assert "" == a.perf_data
コード例 #2
0
    def test_huge_output(self):
        """ Test huge output

         We got problems on LARGE output, more than 64K in fact.
        We try to solve it with the fcntl and non blocking read instead of
        "communicate" mode. So here we try to get a 100K output. Should NOT be in a timeout

        :return: None
        """
        # Set max output length
        max_output_length = 131072

        a = Action()
        a.timeout = 15
        a.command = r"""python -u -c 'print("."*%d)'""" % max_output_length

        ###
        ### 1 - output is less than the max output
        ###
        # Run the action script
        a.execute()
        assert 'launched' == a.status

        # Wait action execution end and set the max output we want for the command
        self.wait_finished(a, size=max_output_length + 1)
        assert 0 == a.exit_status
        assert 'done' == a.status
        assert "."*max_output_length == a.output
        assert "" == a.long_output
        assert "" == a.perf_data

        ###
        ### 2 - output is equal to the max output
        ###
        # Run the action script
        a.execute()
        assert 'launched' == a.status

        # Wait action execution end and set the max output we want for the command
        self.wait_finished(a, size=max_output_length)
        assert 0 == a.exit_status
        assert 'done' == a.status
        assert "."*max_output_length == a.output
        assert "" == a.long_output
        assert "" == a.perf_data

        ###
        ### 3 - output is more than the max output
        ###
        # Run the action script
        a.execute()
        assert 'launched' == a.status

        # Wait action execution end and set the max output we want for the command
        self.wait_finished(a, size=max_output_length - 10)
        assert 0 == a.exit_status
        assert 'done' == a.status
        assert "."*(max_output_length - 10) == a.output
        assert "" == a.long_output
        assert "" == a.perf_data
コード例 #3
0
 def test_non_zero_exit_status_empty_output_but_non_empty_stderr(self):
     a = Action()
     a.command = "echo hooo >&2 ; exit 1"
     a.timeout = 10
     a.env = {}  # :fixme: this sould be pre-set in Action.__init__()
     a.execute()
     self.wait_finished(a)
     self.assertEqual(a.output, "hooo")
コード例 #4
0
ファイル: test_actions.py プロジェクト: jbiousse/alignak
    def test_action_timeout(self):
        """ Test simple action execution - fail on timeout

        :return: None
        """
        # Normal esxecution
        # -----------------
        a = Action()
        # Expect no more than 30 seconds execution time
        a.timeout = 30
        # Action is sleeping for 10 seconds
        a.command = "libexec/sleep_command.sh 10"

        # Run the action script
        a.execute()
        assert 'launched' == a.status

        # Wait action execution end, not more than 5 secondes
        self.wait_finished(a, timeout=30)
        assert 0 == a.exit_status
        assert 'done' == a.status
        assert "I start sleeping for 10 seconds..." == a.output
        assert "I awoke after sleeping 10 seconds" == a.long_output
        assert "sleep=10" == a.perf_data

        # Too long esxecution
        # -------------------
        a = Action()
        # Expect no more than 5 seconds execution time
        a.timeout = 5
        # Action is sleeping for 10 seconds
        a.command = "libexec/sleep_command.sh 10"

        # Run the action script
        a.execute()
        assert 'launched' == a.status

        # Wait action execution end, not more than 5 secondes
        self.wait_finished(a, timeout=10)
        assert 3 == a.exit_status
        assert 'timeout' == a.status
        assert "I start sleeping for 10 seconds..." == a.output
        assert "" == a.long_output
        assert "" == a.perf_data
コード例 #5
0
    def test_action_timeout(self):
        """ Test simple action execution - fail on timeout

        :return: None
        """
        # Normal esxecution
        # -----------------
        a = Action()
        # Expect no more than 30 seconds execution time
        a.timeout = 30
        # Action is sleeping for 10 seconds
        a.command = "libexec/sleep_command.sh 10"

        # Run the action script
        a.execute()
        assert 'launched' == a.status

        # Wait action execution end, not more than 5 secondes
        self.wait_finished(a, timeout=30)
        assert 0 == a.exit_status
        assert 'done' == a.status
        assert "I start sleeping for 10 seconds..." == a.output
        assert "I awoke after sleeping 10 seconds" == a.long_output
        assert "sleep=10" == a.perf_data

        # Too long esxecution
        # -------------------
        a = Action()
        # Expect no more than 5 seconds execution time
        a.timeout = 5
        # Action is sleeping for 10 seconds
        a.command = "libexec/sleep_command.sh 10"

        # Run the action script
        a.execute()
        assert 'launched' == a.status

        # Wait action execution end, not more than 5 secondes
        self.wait_finished(a, timeout=10)
        assert 3 == a.exit_status
        assert 'timeout' == a.status
        assert "I start sleeping for 10 seconds..." == a.output
        assert "" == a.long_output
        assert "" == a.perf_data
コード例 #6
0
    def test_execve_fail_with_utf8(self):
        if os.name == 'nt':
            return

        a = Action()
        a.timeout = 10
        a.env = {}  # :fixme: this sould be pre-set in Action.__init__()

        a.command = u"/bin/echo Wiadomo\u015b\u0107"

        a.execute()
        self.wait_finished(a)
        #print a.output
        self.assertEqual(a.output.decode('utf8'), u"Wiadomo\u015b\u0107")
コード例 #7
0
    def test_got_pipe_shell_characters(self):
        a = Action()
        a.timeout = 10
        a.command = "libexec/dummy_command_nobang.sh | grep 'Please do not use me directly'"
        a.env = {}
        if os.name == 'nt':
            return
        self.assertEqual(True, a.got_shell_characters())
        a.execute()

        self.assertEqual('launched', a.status)
        self.wait_finished(a)
        print "F**k", a.status, a.output
        self.assertEqual(0, a.exit_status)
        self.assertEqual('done', a.status)
コード例 #8
0
    def test_noshell_bang_command(self):
        a = Action()
        a.timeout = 10
        a.command = "libexec/dummy_command_nobang.sh"
        a.env = {}
        if os.name == 'nt':
            return
        self.assertEqual(False, a.got_shell_characters())
        a.execute()

        self.assertEqual('launched', a.status)
        self.wait_finished(a)
        print "F**k", a.status, a.output
        self.assertEqual(0, a.exit_status)
        self.assertEqual('done', a.status)
コード例 #9
0
    def test_grep_for_environment_variables(self):
        if os.name == 'nt':
            return

        a = Action()
        a.timeout = 10
        a.env = {}  # :fixme: this sould be pre-set in Action.__init__()

        a.command = "/usr/bin/env | grep TITI"

        self.assertNotIn('TITI', a.get_local_environnement())
        a.env = {'TITI': 'est en vacance'}
        self.assertIn('TITI', a.get_local_environnement())
        self.assertEqual(a.get_local_environnement()['TITI'],
                         'est en vacance' )
        a.execute()
        self.wait_finished(a)
        self.assertEqual(a.output, 'TITI=est en vacance')
コード例 #10
0
    def test_action(self):
        a = Action()
        a.timeout = 10
        a.env = {}

        if os.name == 'nt':
            a.command = r'libexec\\dummy_command.cmd'
        else:
            a.command = "libexec/dummy_command.sh"
        self.assertEqual(False, a.got_shell_characters())
        a.execute()
        self.assertEqual('launched', a.status)
        # Give also the max output we want for the command
        self.wait_finished(a)
        self.assertEqual(0, a.exit_status)
        self.assertEqual('done', a.status)
        print a.output
        self.assertEqual("Hi, I'm for testing only. Please do not use me directly, really", a.output)
        self.assertEqual("Hip=99% Bob=34mm", a.perf_data)
コード例 #11
0
    def test_got_unclosed_quote(self):
        # https://github.com/naparuba/shinken/issues/155
        a = Action()
        a.timeout = 10
        a.command = "libexec/dummy_command_nobang.sh -a 'wwwwzzzzeeee"
        a.env = {}
        if os.name == 'nt':
            return
        a.execute()

        self.wait_finished(a)
        self.assertEqual('done', a.status)
        print "F**k", a.status, a.output
        if sys.version_info < (2, 7):
            # cygwin: /bin/sh: -c: line 0: unexpected EOF while looking for matching'
            # ubuntu: /bin/sh: Syntax error: Unterminated quoted string
            self.assertTrue(a.output.startswith("/bin/sh"))
            self.assertEqual(3, a.exit_status)
        else:
            self.assertEqual('Not a valid shell command: No closing quotation', a.output)
            self.assertEqual(3, a.exit_status)
コード例 #12
0
    def test_huge_output(self):
        a = Action()
        a.timeout = 5
        a.env = {}

        if os.name == 'nt':
            a.command = r"""python -c 'print "A"*1000000'"""
            # FROM NOW IT4S FAIL ON WINDOWS :(
            return
        else:
            a.command = r"""python -u -c 'print "A"*100000'"""
        print "EXECUTE"
        a.execute()
        print "EXECUTE FINISE"
        self.assertEqual('launched', a.status)
        # Give also the max output we want for the command
        self.wait_finished(a, 10000000000)
        print "Status?", a.exit_status
        self.assertEqual(0, a.exit_status)
        print "Output", len(a.output)
        self.assertEqual(0, a.exit_status)
        self.assertEqual('done', a.status)
        self.assertEqual("A"*100000, a.output)
        self.assertEqual("", a.perf_data)