示例#1
0
    def assertRunnerBehaviour(
        self, script, expected_finally_block, expected_stdout, expected_stderr, sig=signal.SIGINT
    ):
        with hp.a_temp_file() as fle:
            fle.write(script.encode())
            fle.flush()

            with hp.a_temp_file() as out, hp.a_temp_file() as ss:
                out.close()
                ss.close()

                os.remove(out.name)
                os.remove(ss.name)

                s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
                s.settimeout(2)
                s.bind(ss.name)
                s.listen(1)

                pipe = subprocess.PIPE
                p = subprocess.Popen(
                    [sys.executable, fle.name, out.name, ss.name], stdout=pipe, stderr=pipe
                )

                if sig is not None:
                    try:
                        s.accept()
                        time.sleep(0.1)
                    except socket.timeout:
                        pass

                    p.send_signal(sig)

                p.wait(timeout=2)

                got_stdout = p.stdout.read().decode()
                got_stderr = p.stderr.read().decode()

                print("=== STDOUT:")
                print(got_stdout)
                print("=== STDERR:")
                print(got_stderr)

                def assertOutput(out, regex):
                    out = out.strip()
                    regex = regex.strip()
                    assert len(out.split("\n")) == len(regex.split("\n"))
                    pytest.helpers.assert_regex(f"(?m){regex}", out)

                assertOutput(got_stdout, expected_stdout)
                assertOutput(got_stderr, expected_stderr)

                with open(out.name) as o:
                    got = o.read()
                assert got.strip() == expected_finally_block.strip()
示例#2
0
    def __enter__(self):
        self.exit_stack = ExitStack()
        self.exit_stack.__enter__()

        self.fle = self.exit_stack.enter_context(hp.a_temp_file())
        self.fle.write(self.script.encode())
        self.fle.flush()

        self.out = self.exit_stack.enter_context(hp.a_temp_file())
        self.out.close()
        os.remove(self.out.name)

        return self.run
    def meta(self, config="", extra_prepare=None):
        with hp.a_temp_file() as fle:
            fle.write(dedent(config).encode())
            fle.close()

            original = Collector.extra_prepare_after_activation

            class Prepare:
                def __enter__(s):
                    if extra_prepare:

                        def extra(*args, **kwargs):
                            extra_prepare(*args, **kwargs)
                            return original(*args, **kwargs)

                        s.patch = mock.patch.object(
                            Collector, "extra_prepare_after_activation", extra
                        )
                        s.patch.start()

                def __exit__(s, exc_type, exc, tb):
                    if hasattr(s, "patch"):
                        s.patch.stop()

            with Prepare(), open(fle.name) as realfile:
                args_dict = {"photons_app": {"config": realfile}}

                app = App()
                logging_handler = mock.Mock(name="logging_handler")
                collector = app.setup_collector(args_dict, logging_handler, None)
                return Meta({"collector": collector}, [])
示例#4
0
        def from_config(self, config):
            with hp.a_temp_file() as fle:
                fle.write(dedent(config).encode())
                fle.close()

                with open(fle.name) as realfile:
                    args_dict = {"photons_app": {"config": realfile}}

                    app = App()
                    logging_handler = mock.Mock(name="logging_handler")
                    collector = app.setup_collector(args_dict, logging_handler, None)
                return fle.name, args_dict, logging_handler, collector
示例#5
0
    def execute(self, args_obj, args_dict, extra_args, logging_handler):
        data = {
            "for_docs": True,
            "photons_app": {
                "addons": {
                    "lifx.photons": ["__all__"]
                }
            }
        }

        with hp.a_temp_file() as fle:
            fle.write(json.dumps(data).encode())
            fle.flush()
            return super(App, self).execute(args_obj,
                                            args_dict,
                                            extra_args,
                                            logging_handler,
                                            extra_files=[fle.name])
示例#6
0
# coding: spec

from photons_socket.target import SocketTarget

from photons_app.test_helpers import TestCase
from photons_app.collector import Collector
from photons_app import helpers as hp

from photons_messages import DiscoveryMessages

from textwrap import dedent

describe TestCase, "Addon":
    it "works":
        collector = Collector()
        with hp.a_temp_file() as fle:
            fle.write(dedent("""
            ---

            photons_app:
              addons:
                lifx.photons:
                  - socket

            targets:
              lan:
                type: lan
            """).encode())

            fle.flush()
            collector.prepare(fle.name, {})