def test_do_simple(self):
        """ Simple config resolution """
        resolver = Resolver({
            'foo': {
                'module': 'example_classes',
                'class': 'Foo'
            }
        })

        services = resolver.do()

        self.assertTrue('foo' in services)
        assert isinstance(services['foo'], Foo)
    def test_advanced(self):
        # datalogger:
        #     module: datalogger
        #     class: DataLogger
        #     args:
        #         -
        #             name: rob_logger
        #             path: /var/log/monorail
        #             file_base_name: rob
        #             max_file_bytes: 1073741824
        #             backup_count: 10
        #             port: $_port
        config = {
            'logger': {
                'module': 'example_classes',
                'class': 'TestLogger',
                'args': [
                    {
                        'name': 'test_logger',
                        'path': '/var/foo',
                        'file_base_name': 'testlog',
                        'max_file_bytes': 500,
                        'backup_count': 10,
                        'port': '$_port'
                    }
                ]
            }
        }
        scalars = {'_port': 555}
        resolver = Resolver(config, scalars)

        services = resolver.do()
        logger = services['logger']

        assert isinstance(logger, TestLogger)
        self.assertEquals(
            {
                'name': 'test_logger',
                'path': '/var/foo',
                'file_base_name': 'testlog',
                'max_file_bytes': 500,
                'backup_count': 10,
                'port': 555
            },
            logger.config
        )
    def test_do_complicated(self):
        """ Instantiate services from advanced YAML file """
        config = yaml.load(open('test/test_config.yml', 'r')) or {}
        resolver = Resolver(config)

        services = resolver.do()

        assert isinstance(services['foo'], Foo)
        assert isinstance(services['bar'], Bar)
        assert isinstance(services['baz'], Baz)
        assert isinstance(services['qux'], Qux)
        assert isinstance(services['wobble'], Wobble)
        assert isinstance(services['spam'], Spam)

        spam = services['spam']
        self.assertEquals(spam.ham, 'ham!')
        self.assertEquals(spam.eggs, 'eggz')

        wobble = services['wobble']
        assert isinstance(wobble.foo, Foo)
        assert isinstance(wobble.bar, Bar)
        assert isinstance(wobble.baz, Baz)
        assert isinstance(wobble.spam, Spam)