示例#1
0
 def test_parse_rkey(self):
     self.__parse(
         'Location,Frequency\n3,100\n1,101',
         {
             3: db.normalize_record({'freq': 100e6}),
             1: db.normalize_record({'freq': 101e6}),
         },
         [])
示例#2
0
 def test_parse_rkey(self):
     self.__parse(
         'Location,Frequency\n3,100\n1,101',
         {
             3: db.normalize_record({'freq': 100e6}),
             1: db.normalize_record({'freq': 101e6}),
         },
         [])
示例#3
0
 def test_normalize_float(self):
     r = db.normalize_record({
         'lowerFreq': 1,
         'upperFreq': 2
     })
     self.assertIsInstance(r['lowerFreq'], float)
     self.assertIsInstance(r['upperFreq'], float)
示例#4
0
 def test_freq_shorthand(self):
     r = db.normalize_record({
         'freq': 1,
     })
     self.assertEqual(r['lowerFreq'], 1)
     self.assertEqual(r['upperFreq'], 1)
     self.assertNotIn('freq', r)
示例#5
0
    def test_update_good(self):
        new_data = {
            u'type': u'channel',
            u'lowerFreq': 20e6,
            u'upperFreq': 20e6,
            u'label': u'modified',
        }
        index = u'1'
        modified = dict(self.response_json[u'records'])
        modified[index] = db.normalize_record(new_data)

        d = testutil.http_post(reactor, self.__url('/' + str(index)), {
            'old': self.response_json[u'records'][index],
            'new': new_data
        })

        def proceed((response, data)):
            if response.code >= 300:
                print data
            self.assertEqual(response.code, http.NO_CONTENT)
            
            def check(s):
                j = json.loads(s)
                self.assertEqual(j[u'records'], modified)
            
            return client.getPage(self.__url('/')).addCallback(check)
        d.addCallback(proceed)
        return d
示例#6
0
    def test_update_good(self):
        new_data = {
            u'type': u'channel',
            u'lowerFreq': 20e6,
            u'upperFreq': 20e6,
            u'label': u'modified',
        }
        index = u'1'
        modified = dict(self.response_json[u'records'])
        modified[index] = db.normalize_record(new_data)

        d = testutil.http_post_json(
            reactor, self.__url('/' + str(index)), {
                'old': self.response_json[u'records'][index],
                'new': new_data
            })

        def proceed((response, data)):
            if response.code >= 300:
                print data
            self.assertEqual(response.code, http.NO_CONTENT)

            def check((read_response, read_data)):
                j = json.loads(read_data)
                self.assertEqual(j[u'records'], modified)

            return testutil.http_get(reactor,
                                     self.__url('/')).addCallback(check)

        d.addCallback(proceed)
        return d
示例#7
0
 def test_normalize_float(self):
     r = db.normalize_record({
         'lowerFreq': 1,
         'upperFreq': 2
     })
     self.assertIsInstance(r['lowerFreq'], float)
     self.assertIsInstance(r['upperFreq'], float)
示例#8
0
 def test_freq_shorthand(self):
     r = db.normalize_record({
         'freq': 1,
     })
     self.assertEqual(r['lowerFreq'], 1)
     self.assertEqual(r['upperFreq'], 1)
     self.assertNotIn('freq', r)
示例#9
0
 def test_long_line(self):
     self.__parse(
         'Frequency,Name\n1,a,boom',
         {1: db.normalize_record({
             'freq': 1e6,
             'label': 'a'
         })},
         [(2, Warning, 'Record contains extra columns; data discarded.')])
示例#10
0
 def test_no_frequency(self):
     self.__parse(
         'Name,Frequency\na,1\nb',
         {1: db.normalize_record({
             'freq': 1e6,
             'label': 'a'
         })},
         [(3, Warning,
           'Record contains no value for Frequency column; line discarded.')
          ])
示例#11
0
 def test_normalize_complete_result(self):
     self.assertEqual(
         {
             u'type': u'channel',
             u'lowerFreq': 1e6,
             u'upperFreq': 2e6,
             u'mode': u'',
             u'label': u'',
             u'notes': u'',
             u'location': None
         }, db.normalize_record({
             'lowerFreq': 1e6,
             'upperFreq': 2e6,
         }))
示例#12
0
 def test_normalize_complete_result(self):
     self.assertEqual(
         {
             u'type': u'channel',
             u'lowerFreq': 1e6,
             u'upperFreq': 2e6,
             u'mode': u'',
             u'label': u'',
             u'notes': u'',
             u'location': None
         },
         db.normalize_record({
             'lowerFreq': 1e6,
             'upperFreq': 2e6,
         }))
示例#13
0
    def test_create(self):
        new_record = {
            u'type': u'channel',
            u'lowerFreq': 20e6,
            u'upperFreq': 20e6,
        }

        response, data = yield testutil.http_post_json(reactor, self.__url('/'), {
            'new': new_record
        })
        if response.code >= 300:
            print(data)
        self.assertEqual(response.code, http.CREATED)
        url = 'ONLYONE'.join(response.headers.getRawHeaders('Location'))
        self.assertEqual(url, self.__url('/3'))  # URL of new entry
        
        _read_response, read_data = yield testutil.http_get(reactor, self.__url('/'))
        j = json.loads(read_data)
        self.assertEqual(j[u'records'][u'3'], db.normalize_record(new_record))
示例#14
0
    def test_create(self):
        new_record = {
            u'type': u'channel',
            u'lowerFreq': 20e6,
            u'upperFreq': 20e6,
        }

        response, data = yield http_post_json(reactor, self.__url('/'), {
            'new': new_record
        })
        if response.code >= 300:
            print(data)
        self.assertEqual(response.code, http.CREATED)
        url = 'ONLYONE'.join(response.headers.getRawHeaders('Location'))
        self.assertEqual(url, self.__url('/3'))  # URL of new entry
        
        _read_response, read_data = yield http_get(reactor, self.__url('/'))
        j = json.loads(read_data)
        self.assertEqual(j[u'records'][u'3'], db.normalize_record(new_record))
示例#15
0
    def test_update_good(self):
        new_data = {
            u'type': u'channel',
            u'lowerFreq': 20e6,
            u'upperFreq': 20e6,
            u'label': u'modified',
        }
        index = u'1'
        modified = dict(self.response_json[u'records'])
        modified[index] = db.normalize_record(new_data)

        response, data = yield http_post_json(reactor, self.__url('/' + str(index)), {
            'old': self.response_json[u'records'][index],
            'new': new_data
        })
        if response.code >= 300:
            print(data)
        self.assertEqual(response.code, http.NO_CONTENT)
        
        _read_response, read_data = yield http_get(reactor, self.__url('/'))
        j = json.loads(read_data)
        self.assertEqual(j[u'records'], modified)
示例#16
0
    def test_update_good(self):
        new_data = {
            u'type': u'channel',
            u'lowerFreq': 20e6,
            u'upperFreq': 20e6,
            u'label': u'modified',
        }
        index = u'1'
        modified = dict(self.response_json[u'records'])
        modified[index] = db.normalize_record(new_data)

        response, data = yield testutil.http_post_json(reactor, self.__url('/' + str(index)), {
            'old': self.response_json[u'records'][index],
            'new': new_data
        })
        if response.code >= 300:
            print(data)
        self.assertEqual(response.code, http.NO_CONTENT)
        
        _read_response, read_data = yield testutil.http_get(reactor, self.__url('/'))
        j = json.loads(read_data)
        self.assertEqual(j[u'records'], modified)
示例#17
0
 def f():
     db.normalize_record({
         'label': 'foo',
     })
示例#18
0
class TestDBWeb(unittest.TestCase):
    test_records = {
        1:
        db.normalize_record({
            u'type': u'channel',
            u'lowerFreq': 10e6,
            u'upperFreq': 10e6,
            u'mode': u'AM',
            u'label': u'chname',
            u'notes': u'comment',
            u'location': [0, 90],
        }),
        2:
        db.normalize_record({
            u'type': u'band',
            u'lowerFreq': 10e6,
            u'upperFreq': 20e6,
            u'mode': u'AM',
            u'label': u'bandname',
            u'notes': u'comment',
            u'location': None,
        }),
    }
    response_json = {
        u'records': {unicode(k): v
                     for k, v in test_records.iteritems()},
        u'writable': True,
    }

    def setUp(self):
        # pylint: disable=no-member
        db_model = db.DatabaseModel(reactor,
                                    dict(self.test_records),
                                    writable=True)
        dbResource = db.DatabaseResource(db_model)
        self.port = reactor.listenTCP(0,
                                      server.Site(dbResource),
                                      interface="127.0.0.1")

    def tearDown(self):
        return self.port.stopListening()

    def __url(self, path):
        return 'http://127.0.0.1:%i%s' % (self.port.getHost().port, path)

    def test_index_response(self):
        def callback((response, data)):
            self.assertEqual(response.headers.getRawHeaders('Content-Type'),
                             ['application/json'])
            j = json.loads(data)
            self.assertEqual(j, self.response_json)

        return testutil.http_get(reactor,
                                 self.__url('/')).addCallback(callback)

    def test_record_response(self):
        def callback((response, data)):
            self.assertEqual(response.headers.getRawHeaders('Content-Type'),
                             ['application/json'])
            j = json.loads(data)
            self.assertEqual(j, self.test_records[1])

        return testutil.http_get(reactor,
                                 self.__url('/1')).addCallback(callback)

    def test_update_good(self):
        new_data = {
            u'type': u'channel',
            u'lowerFreq': 20e6,
            u'upperFreq': 20e6,
            u'label': u'modified',
        }
        index = u'1'
        modified = dict(self.response_json[u'records'])
        modified[index] = db.normalize_record(new_data)

        d = testutil.http_post(reactor, self.__url('/' + str(index)), {
            'old': self.response_json[u'records'][index],
            'new': new_data
        })

        def proceed((response, data)):
            if response.code >= 300:
                print data
            self.assertEqual(response.code, http.NO_CONTENT)

            def check(s):
                j = json.loads(s)
                self.assertEqual(j[u'records'], modified)

            return client.getPage(self.__url('/')).addCallback(check)

        d.addCallback(proceed)
        return d

    def test_create(self):
        new_record = {
            u'type': u'channel',
            u'lowerFreq': 20e6,
            u'upperFreq': 20e6,
        }

        d = testutil.http_post(reactor, self.__url('/'), {'new': new_record})

        def proceed((response, data)):
            if response.code >= 300:
                print data
            self.assertEqual(response.code, http.CREATED)
            url = 'ONLYONE'.join(response.headers.getRawHeaders('Location'))
            self.assertEqual(url, self.__url('/3'))  # URL of new entry

            def check(s):
                j = json.loads(s)
                self.assertEqual(j[u'records'][u'3'],
                                 db.normalize_record(new_record))

            return client.getPage(self.__url('/')).addCallback(check)

        d.addCallback(proceed)
        return d
示例#19
0
class TestDatabaseResource(unittest.TestCase):
    test_records = {
        1:
        db.normalize_record({
            u'type': u'channel',
            u'lowerFreq': 10e6,
            u'upperFreq': 10e6,
            u'mode': u'AM',
            u'label': u'chname',
            u'notes': u'comment',
            u'location': [0, 90],
        }),
        2:
        db.normalize_record({
            u'type': u'band',
            u'lowerFreq': 10e6,
            u'upperFreq': 20e6,
            u'mode': u'AM',
            u'label': u'bandname',
            u'notes': u'comment',
            u'location': None,
        }),
    }
    response_json = {
        u'records': {six.text_type(k): v
                     for k, v in test_records.items()},
        u'writable': True,
    }

    def setUp(self):
        db_model = db.DatabaseModel(reactor,
                                    dict(self.test_records),
                                    writable=True)
        dbResource = db.DatabaseResource(db_model)
        self.port = reactor.listenTCP(0,
                                      SiteWithDefaultHeaders(dbResource),
                                      interface="127.0.0.1")  # pylint: disable=no-member

    def tearDown(self):
        return self.port.stopListening()

    def __url(self, path):
        url = 'http://127.0.0.1:%i%s' % (self.port.getHost().port, path)
        if six.PY2:
            return url.encode('ascii')
        else:
            return url

    def test_index_common(self):
        return testutil.assert_http_resource_properties(self, self.__url('/'))

    @defer.inlineCallbacks
    def test_index_response(self):
        response, data = yield testutil.http_get(reactor, self.__url('/'))
        self.assertEqual(response.headers.getRawHeaders('Content-Type'),
                         ['application/json'])
        j = json.loads(data)
        self.assertEqual(j, self.response_json)

    def test_record_common(self):
        return testutil.assert_http_resource_properties(self, self.__url('/1'))

    @defer.inlineCallbacks
    def test_record_response(self):
        response, data = yield testutil.http_get(reactor, self.__url('/1'))
        self.assertEqual(response.headers.getRawHeaders('Content-Type'),
                         ['application/json'])
        j = json.loads(data)
        self.assertEqual(j, self.test_records[1])

    @defer.inlineCallbacks
    def test_update_good(self):
        new_data = {
            u'type': u'channel',
            u'lowerFreq': 20e6,
            u'upperFreq': 20e6,
            u'label': u'modified',
        }
        index = u'1'
        modified = dict(self.response_json[u'records'])
        modified[index] = db.normalize_record(new_data)

        response, data = yield testutil.http_post_json(
            reactor, self.__url('/' + str(index)), {
                'old': self.response_json[u'records'][index],
                'new': new_data
            })
        if response.code >= 300:
            print(data)
        self.assertEqual(response.code, http.NO_CONTENT)

        _read_response, read_data = yield testutil.http_get(
            reactor, self.__url('/'))
        j = json.loads(read_data)
        self.assertEqual(j[u'records'], modified)

    @defer.inlineCallbacks
    def test_create(self):
        new_record = {
            u'type': u'channel',
            u'lowerFreq': 20e6,
            u'upperFreq': 20e6,
        }

        response, data = yield testutil.http_post_json(reactor,
                                                       self.__url('/'),
                                                       {'new': new_record})
        if response.code >= 300:
            print(data)
        self.assertEqual(response.code, http.CREATED)
        url = 'ONLYONE'.join(response.headers.getRawHeaders('Location'))
        self.assertEqual(url, self.__url('/3'))  # URL of new entry

        _read_response, read_data = yield testutil.http_get(
            reactor, self.__url('/'))
        j = json.loads(read_data)
        self.assertEqual(j[u'records'][u'3'], db.normalize_record(new_record))
示例#20
0
 def check(s):
     j = json.loads(s)
     self.assertEqual(j[u'records'][u'3'],
                      db.normalize_record(new_record))
示例#21
0
 def test_short_line(self):
     self.__parse('Frequency,Name,Comment\n1,a',
                  {1: db.normalize_record({
                      'freq': 1e6,
                      'label': 'a'
                  })}, [])
示例#22
0
 def check((read_response, read_data)):
     j = json.loads(read_data)
     self.assertEqual(j[u'records'][u'3'], db.normalize_record(new_record))
示例#23
0
 def check((read_response, read_data)):
     j = json.loads(read_data)
     self.assertEqual(j[u'records'][u'3'],
                      db.normalize_record(new_record))
示例#24
0
 def test_no_frequency(self):
     self.__parse(
         'Name,Frequency\na,1\nb',
         {1: db.normalize_record({'freq': 1e6, 'label': 'a'})},
         [(3, Warning, 'Record contains no value for Frequency column; line discarded.')])
示例#25
0
 def test_short_line(self):
     self.__parse(
         'Frequency,Name,Comment\n1,a',
         {1: db.normalize_record({'freq': 1e6, 'label': 'a'})},
         [])
示例#26
0
 def test_long_line(self):
     self.__parse(
         'Frequency,Name\n1,a,boom',
         {1: db.normalize_record({'freq': 1e6, 'label': 'a'})},
         [(2, Warning, 'Record contains extra columns; data discarded.')])
示例#27
0
 def check(s):
     j = json.loads(s)
     self.assertEqual(j[u'records'][u'3'], db.normalize_record(new_record))
示例#28
0
 def add_record(record):
     records.append(normalize_record(record))
示例#29
0
 def f():
     db.normalize_record({
         'lowerFreq': 1,
         'upperFreq': 1,
         'foo': 'bar',
     })
示例#30
0
 def f():
     db.normalize_record({
         'lowerFreq': 1,
         'upperFreq': 1,
         'foo': 'bar',
     })
示例#31
0
 def f():
     db.normalize_record({
         'label': 'foo',
     })
示例#32
0
 def add_record(record):
     records.append(normalize_record(record))