Example #1
0
 def setUp(self):
     """
     Set up an app to test with.
     """
     FlaskTrackUsageTestCase.setUp(self)
     self.storage = MongoStorage(database=DB, collection=COLL_NAME)
     # Clean out the storage
     self.storage.collection.drop()
     self.track_usage = TrackUsage(self.app, self.storage)
 def setUp(self):
     """
     Set up an app to test with.
     """
     FlaskTrackUsageTestCase.setUp(self)
     self.storage = MongoStorage(
         database=DB,
         collection=COLL_NAME
     )
     # Clean out the storage
     self.storage.collection.drop()
     self.track_usage = TrackUsage(self.app, self.storage)
Example #3
0
class TestMongoStorage(FlaskTrackUsageTestCase):
    """
    Tests MongoDB storage while using it's own connection.
    """
    def setUp(self):
        """
        Set up an app to test with.
        """
        FlaskTrackUsageTestCase.setUp(self)
        self.storage = MongoStorage(database=DB, collection=COLL_NAME)
        # Clean out the storage
        self.storage.collection.drop()
        self.track_usage = TrackUsage(self.app, self.storage)

    def test_mongo_storage_data(self):
        """
        Test that data is stored in MongoDB and retrieved correctly.
        """
        self.client.get('/')
        result = self.storage.collection.find_one()
        assert result['blueprint'] is None
        assert result['ip_info'] is None
        assert result['status'] == 200
        self.assertTrue(result['remote_addr']
                        )  # Should be set with modern versions of Flask
        assert result['speed'].__class__ is float
        assert result['view_args'] == {}
        assert result['url'] == 'http://localhost/'
        assert result['authorization'] is False
        assert result['user_agent']['browser'] is None  # because of testing
        assert result['user_agent']['platform'] is None  # because of testing
        assert result['user_agent']['language'] is None  # because of testing
        assert result['user_agent']['version'] is None  # because of testing
        assert result['path'] == '/'
        assert type(result['date']) is datetime.datetime

    def test_mongo_storage_get_usage(self):
        """
        Verify we can get usage information in expected ways.
        """
        # Make 3 requests to make sure we have enough records
        self.client.get('/')
        self.client.get('/')
        self.client.get('/')

        # Limit tests
        assert len(self.storage.get_usage()) == 3
        assert len(self.storage.get_usage(limit=2)) == 2
        assert len(self.storage.get_usage(limit=1)) == 1

        # Page tests
        assert len(self.storage.get_usage(limit=2, page=1)) == 2
        assert len(self.storage.get_usage(limit=2, page=2)) == 1

        # timing tests
        now = datetime.datetime.utcnow()
        assert len(self.storage.get_usage(start_date=now)) == 0
        assert len(self.storage.get_usage(end_date=now)) == 3
        assert len(self.storage.get_usage(end_date=now, limit=2)) == 2
Example #4
0
def create_app(config_class=Config):
    app = Flask(__name__)
    app.config.from_object(Config)
    # app.redis = Redis.from_url(app.config['REDIS_URL'])
    # app.task_queue = rq.Queue(connection=app.redis)
    db.init_app(app)
    t = TrackUsage(
        app, [MongoStorage('PersonalWebsite', 'tracking', Config.MONGO_URI)])

    from website.main.routes import main
    from website.jobs.routes import jobs
    from website.analytics.routes import analytics_bp
    app.register_blueprint(main)
    app.register_blueprint(jobs)
    app.register_blueprint(analytics_bp)
    t.include_blueprint(main)

    return app
class TestMongoStorage(FlaskTrackUsageTestCase):
    """
    Tests MongoDB storage while using it's own connection.
    """

    def setUp(self):
        """
        Set up an app to test with.
        """
        FlaskTrackUsageTestCase.setUp(self)
        self.storage = MongoStorage(
            database=DB,
            collection=COLL_NAME
        )
        # Clean out the storage
        self.storage.collection.drop()
        self.track_usage = TrackUsage(self.app, self.storage)

    def test_mongo_storage_data(self):
        """
        Test that data is stored in MongoDB and retrieved correctly.
        """
        self.client.get('/')
        result = self.storage.collection.find_one()
        assert result['blueprint'] is None
        assert result['ip_info'] is None
        assert result['status'] == 200
        self.assertTrue(result['remote_addr'])  # Should be set with modern versions of Flask
        assert result['speed'].__class__ is float
        assert result['view_args'] == {}
        assert result['url'] == 'http://localhost/'
        assert result['authorization'] is False
        assert result['user_agent']['browser'] is None  # because of testing
        assert result['user_agent']['platform'] is None  # because of testing
        assert result['user_agent']['language'] is None  # because of testing
        assert result['user_agent']['version'] is None  # because of testing
        assert result['path'] == '/'
        assert type(result['date']) is datetime.datetime

    def test_mongo_storage_get_usage(self):
        """
        Verify we can get usage information in expected ways.
        """
        # Make 3 requests to make sure we have enough records
        self.client.get('/')
        self.client.get('/')
        self.client.get('/')

        # Limit tests
        assert len(self.storage.get_usage()) == 3
        assert len(self.storage.get_usage(limit=2)) == 2
        assert len(self.storage.get_usage(limit=1)) == 1

        # Page tests
        assert len(self.storage.get_usage(limit=2, page=1)) == 2
        assert len(self.storage.get_usage(limit=2, page=2)) == 1

        # timing tests
        now = datetime.datetime.utcnow()
        assert len(self.storage.get_usage(start_date=now)) == 0
        assert len(self.storage.get_usage(end_date=now)) == 3
        assert len(self.storage.get_usage(end_date=now, limit=2)) == 2