Example #1
0
class TestTimeResource(unittest.TestCase):
    """
    Observing time resource
    """

    def setUp(self):
        """
        Setup a CoAP server and assign a TimeResource to it
        """
        self.server = Endpoint(__name__)

        class TimeResource(Resource):
            """
            Simple Time Resource that give the time and support observation.

            :return:
            """

            def __call__(self):
                """
                Resource that returns the current time on a GET request.
                It also Supports observing.
                """
                self.time = datetime.datetime.now()
                self.changed()  # Call changed to notify subscribers
                return self.time

        self.server.add_url_rule("/time", obs=True,
                      methods=["GET", "POST"],
                      resource=TimeResource(title="CurrentTime"))

    def test_get(self):
        """
        Simple get test
        """
        r = coap.get(self.server.url + "/time")
        self.assertEqual(r.status, codes.ok)

    def test_observe(self):
        """
        Implement a simple observe process
        """
        r = coap.observe(self.server.url + "/time")
        self.assertEqual(codes.ok, r.code)
Example #2
0
class TestTimeResource(unittest.TestCase):
    """
    Observing time resource
    """
    def setUp(self):
        """
        Setup a CoAP server and assign a TimeResource to it
        """
        self.server = Endpoint(__name__)

        class TimeResource(Resource):
            """
            Simple Time Resource that give the time and support observation.

            :return:
            """
            def __call__(self):
                """
                Resource that returns the current time on a GET request.
                It also Supports observing.
                """
                self.time = datetime.datetime.now()
                self.changed()  # Call changed to notify subscribers
                return self.time

        self.server.add_url_rule("/time",
                                 obs=True,
                                 methods=["GET", "POST"],
                                 resource=TimeResource(title="CurrentTime"))

    def test_get(self):
        """
        Simple get test
        """
        r = coap.get(self.server.url + "/time")
        self.assertEqual(r.status, codes.ok)

    def test_observe(self):
        """
        Implement a simple observe process
        """
        r = coap.observe(self.server.url + "/time")
        self.assertEqual(codes.ok, r.code)
Example #3
0
class TestWebCoAP(unittest.TestCase):
    """
    Interface CoAP, HTTP and observing in a simple weather setting.
    """

    def setUp(self):
        """
        Set up a loop to fetch the weather.
        :return:
        """
        self.server = Endpoint(__name__)

        def weather(self):
            """
            Infinite loop checking weather on a exterior website
            """
            while True:
                r = urlopen("http://openweather.com/")
                publish(content=r.readall())

        self.server.add_url_rule("/weather",
                              function=weather,
                              observable=True,
                              t=["json", "text"],
                              title="GET the current weather in Paris")

    def test_simple_get(self):
        """
        Simple get
        """
        temp = coap.get(self.server.url + "/weather")
        self.assertTrue(-50 < temp < 50)

    def test_simple_observe(self):
        """
        Simple observe
        """
        obs = coap.observe(self.server.url + "/weather",
                           sub=subscribe)
        for item in obs.listen(5):
            self.assertTrue(-50 < item < 50)
Example #4
0
class TestWebCoAP(unittest.TestCase):
    """
    Interface CoAP, HTTP and observing in a simple weather setting.
    """
    def setUp(self):
        """
        Set up a loop to fetch the weather.
        :return:
        """
        self.server = Endpoint(__name__)

        def weather(self):
            """
            Infinite loop checking weather on a exterior website
            """
            while True:
                r = urlopen("http://openweather.com/")
                publish(content=r.readall())

        self.server.add_url_rule("/weather",
                                 function=weather,
                                 observable=True,
                                 t=["json", "text"],
                                 title="GET the current weather in Paris")

    def test_simple_get(self):
        """
        Simple get
        """
        temp = coap.get(self.server.url + "/weather")
        self.assertTrue(-50 < temp < 50)

    def test_simple_observe(self):
        """
        Simple observe
        """
        obs = coap.observe(self.server.url + "/weather", sub=subscribe)
        for item in obs.listen(5):
            self.assertTrue(-50 < item < 50)
Example #5
0
class BasicFunctionalityTestCase(unittest.TestCase):
    """
    Basic routing and endpoint testing
    """

    def setUp(self):
        """
        Set up a simple Endpoint. All the settings will be done
        in the further tests.
        """
        self.server = Endpoint(__name__)

    def test_request_dispatching(self):
        """
        Simple request dispatching
        """
        def index(request):
            """
            Simple mirror view
            :param request: Incoming request
            """
            return request.method

        self.server.route("/", index)
        self.server.route("/more", index, methods=['GET', 'POST'])

        self.assertEqual(coap.get(self.server.url + '/').data, 'GET')
        self.assertEqual(coap.post(self.server.url + '/').status_code, 405)
        self.assertEqual(coap.get(self.server.url + '/').status_code, 200)
        self.assertEqual(coap.post(self.server.url + '/more').data, 'POST')
        self.assertEqual(coap.get(self.server.url + '/more').data, 'GET')
        self.assertEqual(
            coap.delete(self.server.url + '/more').status_code,
            405)

    def test_url_mapping(self):
        """
        Simple URL mapping
        """
        method = lambda request: request.method

        self.server.add_url_rule('/', 'index', method)
        self.server.add_url_rule('/more', 'more', method,
            methods=['GET', 'POST'])
        self.assertEqual(coap.get(self.server.url + '/').data, 'GET')

        rv = coap.post(self.server.url + '/')
        self.assertEqual(rv.status_code, 405)

        rv = coap.delete(self.server.url + '/more')
        self.assertEqual(rv.status_code, 405)

    def test_routing(self):
        """
        Routing testing
        """
        self.server.url_map.add(('/foo', [
            Rule('/bar', endpoint='bar'),
            Rule('/', endpoint='index')
        ]))

        self.server.view_functions['bar'] = lambda: "bar"
        self.server.view_functions['index'] = lambda: "index"

        self.assertEqual(coap.get('/foo/').data, 'index')
        self.assertEqual(coap.get('/foo/bar').data, 'bar')

    def test_endpoint_decorator(self):
        """
        Test sub rule
        """
        self.server.url_map.add(
            ('/foo', [
                Rule('/bar', endpoint='bar'),
                Rule('/', endpoint='index')
            ]))

        self.server.destination('bar', lambda: "bar")
        self.server.destination('index', lambda: "index")

        self.assertEqual(coap.get('/foo/').data, "index")
        self.assertEqual(coap.get('/foo/bar').data, "bar")

    def test_error_handling(self):
        """
        Testing of the exception in the Endpoint
        """

        self.server.errorhandler(404, 'not found')
        self.server.errorhandler(500, 'internal server error')

        def index():
            """
            not_found called
            """
            self.server.abort(404)

        def error():
            """
            internal_server_error called
            """
            return 1 // 0

        self.server.route('/', index)
        self.server.route("/error", error)

        rv = coap.get(self.server.url + '/')
        self.assertEqual(rv.status_code, 404)
        self.assertEqual(rv.data, 'not found')

        rv = coap.get(self.server.url + '/error')
        self.assertEqual(rv.status_code, 500)
        self.assertEqual('internal server error', rv.data)

    def test_unicode(self):
        """
        Test unicode encoding
        """

        self.server.route('/unicode', lambda: 'Hällo Wörld')
        self.assertEqual(
            coap.get('/unicode').data,
            'Hällo Wörld'.encode())

    def test_max_content_length(self):
        """
        Test of the limitation of posting data on an endpoint

        :return:
        """
        self.server.config['MAX_CONTENT_LENGTH'] = 64
        rv = coap.post('/accept', data={'my_file': 'foo' * 100})
        self.assertEqual(rv.data, '42')