示例#1
0
class TestBundleClass(unittest.TestCase):
    def setUp(self):
        self.bundle = Bundle(load=False)

    def tearDown(self):
        self.bundle = None

    def test_init(self):
        self.assertIn("sdk_dir", self.bundle.__dict__)
        self.assertIn("bundle_dir", self.bundle.__dict__)
        self.assertIn("profile", self.bundle.__dict__)

        # force load equals to false for testing
        bundle = Bundle(bundle_dir="/123/", sdk_dir="/456/", load=False)
        self.assertEqual(bundle.bundle_dir, "/123/")
        self.assertEqual(bundle.sdk_dir, "/456/")

        # catching BundleConfigError when input bundle path is wrong
        with self.assertRaises(BundleConfigError):
            bundle = Bundle(bundle_dir="/YOU CANT FIND ME/")

        bundle = Bundle(bundle_dir=bundle_dir)
        self.assertEqual(bundle.bundle_dir, bundle_dir)
        json_path = os.path.normpath(
            os.path.realpath(__file__) + './../../mockup/bundle/bundle.json')
        with open(json_path) as f:
            self.assertDictEqual(bundle.profile, json.load(f))

    def test_load_json(self):
        with self.assertRaises(BundleConfigError):
            self.bundle.load_json()
示例#2
0
class TestBundleClass(unittest.TestCase):

    def setUp(self):
        self.bundle = Bundle(load=False)

    def tearDown(self):
        self.bundle = None

    def test_init(self):
        self.assertIn("sdk_dir", self.bundle.__dict__)
        self.assertIn("bundle_dir", self.bundle.__dict__)
        self.assertIn("profile", self.bundle.__dict__)

        # force load equals to false for testing
        bundle = Bundle(bundle_dir="/123/", sdk_dir="/456/", load=False)
        self.assertEqual(bundle.bundle_dir, "/123/")
        self.assertEqual(bundle.sdk_dir, "/456/")

        # catching BundleConfigError when input bundle path is wrong
        with self.assertRaises(BundleConfigError):
            bundle = Bundle(bundle_dir="/YOU CANT FIND ME/")

        bundle = Bundle(bundle_dir=bundle_dir)
        self.assertEqual(bundle.bundle_dir, bundle_dir)
        json_path = os.path.normpath(os.path.realpath(__file__) +
                                     './../../mockup/bundle/bundle.json')
        with open(json_path) as f:
            self.assertDictEqual(bundle.profile, json.load(f))

    def test_load_json(self):
        with self.assertRaises(BundleConfigError):
            self.bundle.load_json()
示例#3
0
 def test_boot_all(self, boot):
     bundle_path = dirpath + "/mock_bundles/bundle_1"
     boot.return_value = BundleMeta
     (None, Event().set(), None, Mock(is_ready=Event().set()))
     self.sanjikeeper.boot_all(bundles={bundle_path: Bundle(bundle_path)},
                               bundle_sequence=[],
                               connection_class=Mockup)
示例#4
0
    def __init__(self, *args, **kwargs):

        # Setup default options
        bundle = kwargs.get("bundle", None)
        connection = kwargs.get("connection", None)
        stop_event = kwargs.get("stop_event", Event())

        if connection is None:
            raise ValueError("Connection is required.")

        # Model-related
        bundle_dir = os.path.dirname(inspect.getfile(self.__class__))
        if bundle is None:
            bundle = Bundle(bundle_dir=bundle_dir)
        self.bundle = bundle
        self.stop_event = stop_event
        self.reg_thread = None
        self.reg_delay = lambda: random() * 5

        # Router-related (Dispatch)
        self.router = Router()
        self.dispatch_thread_count = 3
        self.thread_list = []

        # Response-related (Resolve)
        self._session = Session()
        self.resolve_thread_count = 1

        # Message Bus
        self._conn = connection
        self.is_ready = Event()
        self.req_queue = Queue()
        self.res_queue = Queue()

        # Setup callbacks
        self._conn.set_on_message(self.on_sanji_message)
        self._conn.set_on_connect(self.on_connect)
        self._conn.set_on_publish(self.on_publish)

        # Publisher
        self.publish = Publish(self._conn, self._session)

        # Register signal to call stop() (only mainthread could do this)
        if threading.current_thread().__class__.__name__ == '_MainThread':
            signal.signal(signal.SIGINT, self.exit)

        # Auto-register routes
        methods = inspect.getmembers(self, predicate=inspect.ismethod)
        self._register_routes(methods)

        # Custom init function
        if hasattr(self, 'init') and \
           hasattr(self.init, '__call__'):
            _logger.debug("Custom init start")
            self.init(*args, **kwargs)
            _logger.debug("Custom init finish")
示例#5
0
 def test_boot(self, Thread):
     Thread.return_value = Mock()
     options = {
         "bundle": Bundle(dirpath + "/mock_bundles/bundle_1"),
         "bundle_dir": os.path.normpath(dirpath + "/mock_bundles/bundle_1"),
         "connection": Mockup(),
         "stop_event": Event()
     }
     meta = self.sanjikeeper.boot(**options)
     self.assertIsInstance(meta, BundleMeta)
示例#6
0
 def test_route(self):
     bundle = Bundle(bundle_dir=bundle_dir)
     test_model = TestModel(connection=ConnectionMockup(),
                            bundle=bundle)
     routes = test_model.router.routes
     self.assertIn("/model/test/:id", routes)
     self.assertEqual(4, len(routes["/model/test/:id"].handlers))
     self.assertIn("/model", routes)
     self.assertEqual(1, len(routes["/model"].handlers))
     self.assertIn("/model/:id", routes)
     self.assertEqual(3, len(routes["/model/:id"].handlers))
示例#7
0
    def test_route(self):
        bundle = Bundle(bundle_dir=bundle_dir)
        test_model = TestModel(connection=Mockup(), bundle=bundle)
        routes = test_model.router.routes
        self.assertIn("/model/test/:id", routes)
        self.assertEqual(4, len(routes["/model/test/:id"].handlers))
        self.assertIn("/model", routes)
        self.assertEqual(1, len(routes["/model"].handlers))
        self.assertIn("/model/:id", routes)
        self.assertEqual(3, len(routes["/model/:id"].handlers))

        # while test=True don't warp function
        def resp(test):
            self.assertTrue(test)

        test_model.mockup_handler(True, resp, test=True)
示例#8
0
    def test_init(self):
        with self.assertRaises(BundleConfigError):
            TestModel(connection=Mockup())

        with self.assertRaises(ValueError):
            TestModel()

        event = Event()
        bundle = Bundle(bundle_dir=bundle_dir)
        tm = TestModel(bundle=bundle,
                       connection=Mockup(),
                       stop_event=event,
                       test_variable=True)

        # bypassing test_variable to init()
        self.assertTrue(tm.test_variable)
示例#9
0
    def test_init(self):
        with self.assertRaises(BundleConfigError):
            TestModel(connection=ConnectionMockup())

        with self.assertRaises(ValueError):
            TestModel()

        event = Event()
        bundle = Bundle(bundle_dir=bundle_dir)
        tm = TestModel(bundle=bundle, connection=ConnectionMockup(),
                       stop_event=event)
        thread = Thread(target=tm.start)
        thread.daemon = True
        thread.start()
        thread.join(0.2)
        event.set()
示例#10
0
文件: core.py 项目: lwindg/sanji
    def __init__(self, bundle=None, connection=None, stop_event=Event()):
        if connection is None:
            raise ValueError("Connection is required.")
        # Model-related
        bundle_dir = os.path.dirname(inspect.getfile(self.__class__))
        if bundle is None:
            bundle = Bundle(bundle_dir=bundle_dir)
        self.bundle = bundle
        self.stop_event = stop_event

        # Router-related (Dispatch)
        self.router = Router()
        self.dispatch_thread_count = 5
        self.dispatch_thread_list = []

        # Response-related (Resolve)
        self._session = Session()
        self.resolve_thread_count = 1
        self.resolve_thread_list = []

        # Message Bus
        self._conn = connection
        self.is_ready = Event()
        self.req_queue = Queue()
        self.res_queue = Queue()

        # Setup callbacks
        self._conn.set_on_connect(self.on_connect)
        self._conn.set_on_message(self.on_message)
        self._conn.set_on_connect(self.on_connect)
        self._conn.set_on_publish(self.on_publish)

        # Publisher
        self.publish = Publish(self._conn, self._session)

        # Register signal to call stop()
        signal.signal(signal.SIGINT, self.exit)

        # Auto-register routes
        methods = inspect.getmembers(self, predicate=inspect.ismethod)
        self._register_routes(methods)

        # Custom init function
        logger.debug("Custom init start")
        self.init()
        logger.debug("Custom init finish")
示例#11
0
 def setUp(self):
     self.bundle = Bundle(load=False)
示例#12
0
 def setUp(self):
     self.bundle = Bundle(load=False)
示例#13
0
 def setUp(self, Thread):
     self.bundle = Bundle(bundle_dir=bundle_dir)
     self.test_model = TestModel(connection=Mockup(), bundle=self.bundle)