|
- import nilmdb
-
- from nose.tools import *
- from nose.tools import assert_raises
- import distutils.version
- import itertools
- import os
- import shutil
- import sys
- import cherrypy
- import threading
- import urllib2
- from urllib2 import urlopen, HTTPError
- import Queue
- import cStringIO
-
- from test_helpers import *
-
- from nilmdb.layout import *
-
- class TestLayouts(object):
- # Some nilmdb.layout tests. Not complete, just fills in missing
- # coverage.
- def test_layouts(self):
- x = nilmdb.layout.named["PrepData"].description()
-
- def test_parsing(self):
- # invalid layout
- with assert_raises(TypeError) as e:
- parser = Parser("NoSuchLayout")
-
- # too little data
- parser = Parser("PrepData")
- data = ( "1234567890.000000 1.1 2.2 3.3 4.4 5.5\n" +
- "1234567890.100000 1.1 2.2 3.3 4.4 5.5\n")
- with assert_raises(ParserError) as e:
- parser.parse(data)
- in_("error", str(e.exception))
-
- # too much data
- parser = Parser("PrepData")
- data = ( "1234567890.000000 1.1 2.2 3.3 4.4 5.5 6.6 7.7 8.8 9.9\n" +
- "1234567890.100000 1.1 2.2 3.3 4.4 5.5 6.6 7.7 8.8 9.9\n")
- with assert_raises(ParserError) as e:
- parser.parse(data)
- in_("error", str(e.exception))
-
- # just right
- parser = Parser("PrepData")
- data = ( "1234567890.000000 1.1 2.2 3.3 4.4 5.5 6.6 7.7 8.8\n" +
- "1234567890.100000 1.1 2.2 3.3 4.4 5.5 6.6 7.7 8.8\n")
- parser.parse(data)
- eq_(parser.min_timestamp, 1234567890.0)
- eq_(parser.max_timestamp, 1234567890.1)
- eq_(parser.data, [[1234567890.0,1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8],
- [1234567890.1,1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8]])
-
- # try RawData too, with clamping
- parser = Parser("RawData")
- data = ( "1234567890.000000 1 2 3 4 5 6\n" +
- "1234567890.100000 1 2 3 4 5 6\n" )
- parser.parse(data)
- eq_(parser.data, [[1234567890.0,1,2,3,4,5,6],
- [1234567890.1,1,2,3,4,5,6]])
-
- # pass an instantiated class
- parser = Parser(RawNotchedData())
- data = ( "1234567890.000000 1 2 3 4 5 6 7 8 9\n" +
- "1234567890.100000 1 2 3 4 5 6 7 8 9\n" )
- parser.parse(data)
-
- # non-monotonic
- parser = Parser("RawData")
- data = ( "1234567890.100000 1 2 3 4 5 6\n" +
- "1234567890.000000 1 2 3 4 5 6\n" )
- with assert_raises(ParserError) as e:
- parser.parse(data)
- in_("not monotonically increasing", str(e.exception))
-
- # RawData with values out of bounds
- parser = Parser("RawData")
- data = ( "1234567890.000000 1 2 3 4 500000 6\n" +
- "1234567890.100000 1 2 3 4 5 6\n" )
- with assert_raises(ParserError) as e:
- parser.parse(data)
- in_("value out of range", str(e.exception))
-
- # Empty data should work but is useless
- parser = Parser("RawData")
- data = ""
- parser.parse(data)
- assert(parser.min_timestamp is None)
- assert(parser.max_timestamp is None)
|