Exemplo n.º 1
0
    def test_broadcast_incoming_value_changes(self):
        # params
        pars = Params()
        pars.string('name')
        pars.int('age')
        # server
        s = Server(pars)
        # remote r1
        r1 = Remote()
        s.connect(r1)

        # remote r2
        r2_value_log = []

        def onval(path, val):
            print('--- on val {}'.format(path))
            r2_value_log.append((path, val))

        r2 = Remote()
        r2.outgoing.sendValueEvent += onval
        s.connect(r2)

        self.assertEqual(r2_value_log, [])
        # remote r1 send value change to server
        r1.incoming.valueEvent('/age', 41)
        # verify the change was broadcasted to r2
        self.assertEqual(r2_value_log, [('/age', 41)])
Exemplo n.º 2
0
 def test_propagates_params_changes(self):
   p = Params()
   self.assertEqual(len(p), 0)
   p2 = Params()
   p.group('P2', p2)
   self.assertEqual(p.changeEvent._fireCount, 1)
   p2.int('foo')
   self.assertEqual(p.changeEvent._fireCount, 2)
Exemplo n.º 3
0
  def test_schema_list_with_restrictions(self):
    pars = Params()
    pars.int('count', min=3, max=10).set(1)
    pars.float('price', min=0.0, max=1.0).set(9.99)

    self.assertEqual(schema_list(pars), [
      {'path': '/count', 'type':'i', 'value':3, 'opts': {'min':3, 'max':10}},
      {'path': '/price', 'type':'f', 'value':1.0, 'opts': {'min':0.0, 'max':1.0}},
    ])
Exemplo n.º 4
0
  def test_set_values(self):
    pars = Params()
    pars.int('count').set(1)
    pars.float('price').set(9.99)

    subpars = Params()
    subpars.bool('flag').set(True)
    pars.group('subgroup', subpars)
    
    set_values(pars, {'count': 5, 'price': 0.5, 'subgroup': {'flag': False}})
    self.assertEqual(pars.get('count').val(), 5)
    self.assertEqual(pars.get('price').val(), 0.5)
    self.assertEqual(pars.get('subgroup').get('flag').val(), False)
Exemplo n.º 5
0
  def test_get_values(self):
    pars = Params()
    pars.int('count').set(1)
    pars.float('price').set(9.99)

    vals = get_values(pars)

    self.assertEqual(vals['count'], 1)
    self.assertEqual(vals['price'], 9.99)
    self.assertEqual(json.loads(json.dumps(vals))['count'], 1)
    self.assertEqual(json.loads(json.dumps(vals))['price'], 9.99)

    pars.get('count').set(100)
    self.assertEqual(get_values(pars)['count'], 100)
Exemplo n.º 6
0
  def test_int(self):
    params = Params()
    param = params.int('age')
    self.assertEqual(param.type, 'i')
    self.assertTrue(isinstance(param, Param))

    param.set('4')
    self.assertEqual(param.val(), 4)
    param.set('zzz')
    self.assertEqual(param.val(), 4)
Exemplo n.º 7
0
  def test_schema_list_with_values(self):
    pars = Params()
    pars.string('name').set('Moby Dick')
    pars.int('count').set(100)
    pars.float('price').set(9.99)
    pars.bool('soldout').set(False)

    details = Params()
    details.int('page_count').set(345)
    details.string('author').set('Herman Melville')
    pars.group('details', details)

    self.assertEqual(schema_list(pars), [
      {'path': '/name', 'type':'s', 'value':'Moby Dick'},
      {'path': '/count', 'type':'i', 'value':100},
      {'path': '/price', 'type':'f', 'value':9.99},
      {'path': '/soldout', 'type':'b', 'value':False},
      {'path': '/details/page_count', 'type':'i','value':345},
      {'path': '/details/author', 'type':'s','value':'Herman Melville'}
    ])
Exemplo n.º 8
0
  def test_schema_list(self):
    pars = Params()
    pars.string('name')
    pars.int('count')
    pars.float('price')
    pars.bool('soldout')

    details = Params()
    details.int('page_count')
    details.string('author')
    pars.group('details', details)

    self.assertEqual(schema_list(pars), [
      {'path': '/name', 'type':'s'},
      {'path': '/count', 'type':'i'},
      {'path': '/price', 'type':'f'},
      {'path': '/soldout', 'type':'b'},
      {'path': '/details/page_count', 'type':'i'},
      {'path': '/details/author', 'type':'s'}
    ])
Exemplo n.º 9
0
    def test_create_sync_params(self):
        # params
        pars = Params()
        pars.string('name')
        # server
        s = Server(pars)
        # remote
        r1 = Remote()
        s.connect(r1)
        p1 = create_sync_params(r1)

        # before
        self.assertEqual(len(p1), 1)
        self.assertIsNone(p1.get('ranking'))
        # mutation; a new parameter is added to pars
        pars.int('ranking')

        # after; verify the mutation is applied to r1's synced params
        self.assertEqual(len(p1), 2)
        self.assertIsNotNone(p1.get('ranking'))
Exemplo n.º 10
0
                          default='info')

        opts, args = parser.parse_args()
        lvl = {
            'debug': logging.DEBUG,
            'info': logging.INFO,
            'warning': logging.WARNING,
            'error': logging.ERROR,
            'critical': logging.CRITICAL
        }['debug' if opts.verbose else str(opts.verbosity).lower()]
        logging.basicConfig(level=lvl)

        return opts, args

    opts, args = parse_args()

    params = Params()
    params.string('name')
    params.float('score')
    params.int('level')
    params.bool('highest-score')

    http_server = HttpServer(Server(params))
    try:
        while True:
            time.sleep(0.5)
    except KeyboardInterrupt:
        print("Received Ctrl+C... initiating exit")

    http_server.stop()
Exemplo n.º 11
0
    def test_osc_server_choreography(self):
        #
        # setup
        #

        # param
        params = Params()
        params.string("name")
        # server
        server = Server(params)

        # intercept all outgoing osc messages into send_log
        send_log = []

        def capture(host, port, addr, args):
            send_log.append((host, port, addr, args))

        # create osc server
        osc_server = OscServer(server, capture_sends=capture, listen=False)

        #
        # Client connects
        #

        # create fake incoming connect message
        osc_server.receive('/params/connect', ['127.0.0.1:8081'])
        # verify a connect confirmation was sent
        self.assertEqual(send_log,
                         [('127.0.0.1', 8081, '/params/connect/confirm',
                           (json.dumps(schema_list(params))))])

        #
        # Client sends new value
        #
        self.assertIsNone(params.get('name').val())
        send_log.clear()
        osc_server.receive('/params/value', ['/name', 'Fab'])
        # verify value got applied into our local params
        self.assertEqual(params.get('name').val(), 'Fab')
        # verify the value was broadcasted back to client
        self.assertEqual(send_log, [('127.0.0.1', 8081, '/params/value',
                                     ('/name', 'Fab'))])

        #
        # Client sends invalid new value
        #
        send_log.clear()
        osc_server.receive('/params/value', ['/foo', 'bar'])
        # verify nothing sent out to client(s)
        self.assertEqual(len(send_log), 0)

        #
        # Schema change broadcasted to client
        #
        send_log.clear()
        params.int('age')
        self.assertEqual(send_log, [('127.0.0.1', 8081, '/params/schema',
                                     (json.dumps(schema_list(params))))])

        #
        # Client requests schema
        #
        send_log.clear()
        osc_server.receive('/params/schema', ['192.168.1.2:8080'])
        # verify response
        self.assertEqual(send_log, [('192.168.1.2', 8080, '/params/schema',
                                     (json.dumps(schema_list(params))))])

        #
        # Client disconnected by server
        #
        send_log.clear()
        # osc_server.receive('/params/disconnect', ('127.0.0.1:8081'))
        for r in server.connected_remotes:
            r.outgoing.send_disconnect()
            # server.disconnect(r)
        self.assertEqual(send_log,
                         [('127.0.0.1', 8081, '/params/disconnect', ())])