Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/tests/units/node/stats.py
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@sugarlabs.org>2014-05-12 15:12:24 (GMT)
committer Aleksey Lim <alsroot@sugarlabs.org>2014-05-12 15:50:02 (GMT)
commite0008f8b1cd2ccb1e044dfbabfa30c54d07d71fa (patch)
tree4208645b16b277cb55872ea85a5aa7ec479d1291 /tests/units/node/stats.py
parentfbfc90eae2909a640dfee17715f39234522ea3bf (diff)
Revert node statistics
Diffstat (limited to 'tests/units/node/stats.py')
-rwxr-xr-xtests/units/node/stats.py444
1 files changed, 444 insertions, 0 deletions
diff --git a/tests/units/node/stats.py b/tests/units/node/stats.py
new file mode 100755
index 0000000..738b5f6
--- /dev/null
+++ b/tests/units/node/stats.py
@@ -0,0 +1,444 @@
+#!/usr/bin/env python
+# sugar-lint: disable
+
+import time
+from cStringIO import StringIO
+
+from __init__ import tests
+
+from sugar_network.node.auth import RootAuth
+from sugar_network.node.model import Volume
+from sugar_network.node.stats import StatRoutes
+from sugar_network.toolkit.coroutine import this
+
+
+class StatsTest(tests.Test):
+
+ def test_StatContexts(self):
+ ts = int(time.time())
+ volume = self.start_master(auth=RootAuth())
+ self.node_routes.stats_init('.', 1, ['RRA:AVERAGE:0.5:1:10'])
+
+ self.override(time, 'time', lambda: ts)
+ guid1 = this.call(method='POST', path=['context'], content={'title': '', 'summary': '', 'description': '', 'type': 'activity'})
+ self.node_routes.stats_commit()
+ self.assertEqual([
+ (ts + 0, {'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
+ ],
+ this.call(method='GET', cmd='stats'))
+
+ self.override(time, 'time', lambda: ts + 1)
+ guid2 = this.call(method='POST', path=['context'], content={'title': '', 'summary': '', 'description': '', 'type': 'activity'})
+ self.node_routes.stats_commit()
+ self.assertEqual([
+ (ts + 0, {'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
+ (ts + 1, {'contexts': 2.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
+ ],
+ this.call(method='GET', cmd='stats'))
+
+ self.override(time, 'time', lambda: ts + 2)
+ this.call(method='DELETE', path=['context', guid1])
+ self.node_routes.stats_commit()
+ self.assertEqual([
+ (ts + 0, {'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
+ (ts + 1, {'contexts': 2.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
+ (ts + 2, {'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
+ ],
+ this.call(method='GET', cmd='stats'))
+
+ self.override(time, 'time', lambda: ts + 3)
+ this.call(method='DELETE', path=['context', guid2])
+ self.node_routes.stats_commit()
+ self.assertEqual([
+ (ts + 0, {'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
+ (ts + 1, {'contexts': 2.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
+ (ts + 2, {'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
+ (ts + 3, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
+ ],
+ this.call(method='GET', cmd='stats'))
+
+ def test_StatReleased(self):
+ ts = int(time.time())
+ volume = self.start_master(auth=RootAuth())
+ self.node_routes.stats_init('.', 1, ['RRA:AVERAGE:0.5:1:10'])
+
+ self.override(time, 'time', lambda: ts)
+ guid = this.call(method='POST', path=['context'], content={'title': '', 'summary': '', 'description': '', 'type': 'activity'})
+ agg1 = this.call(method='POST', path=['context', guid, 'releases'], content=StringIO(
+ self.zips(('topdir/activity/activity.info', '\n'.join([
+ '[Activity]',
+ 'name = Activity',
+ 'bundle_id = %s' % guid,
+ 'exec = true',
+ 'icon = icon',
+ 'activity_version = 1',
+ 'license = Public Domain',
+ ])))))
+ self.node_routes.stats_commit()
+ self.assertEqual([
+ (ts + 0, {'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0}),
+ ],
+ this.call(method='GET', cmd='stats'))
+
+ self.override(time, 'time', lambda: ts + 1)
+ this.call(method='POST', path=['user'], content={'name': '', 'pubkey': tests.PUBKEY})
+ self.node_routes.stats_commit()
+ self.assertEqual([
+ (ts + 0, {'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0}),
+ (ts + 1, {'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 1.0}),
+ ],
+ this.call(method='GET', cmd='stats'))
+
+ self.override(time, 'time', lambda: ts + 2)
+ agg2 = this.call(method='POST', path=['context', guid, 'releases'], content=StringIO(
+ self.zips(('topdir/activity/activity.info', '\n'.join([
+ '[Activity]',
+ 'name = Activity',
+ 'bundle_id = %s' % guid,
+ 'exec = true',
+ 'icon = icon',
+ 'activity_version = 2',
+ 'license = Public Domain',
+ ])))))
+ self.node_routes.stats_commit()
+ self.assertEqual([
+ (ts + 0, {'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0}),
+ (ts + 1, {'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 1.0}),
+ (ts + 2, {'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 0.0, 'topics': 2.0, 'posts': 0.0, 'users': 1.0}),
+ ],
+ this.call(method='GET', cmd='stats'))
+
+ self.override(time, 'time', lambda: ts + 3)
+ agg2 = this.call(method='POST', path=['context', guid, 'releases'], content=StringIO(
+ self.zips(('topdir/activity/activity.info', '\n'.join([
+ '[Activity]',
+ 'name = Activity',
+ 'bundle_id = %s' % guid,
+ 'exec = true',
+ 'icon = icon',
+ 'activity_version = 3',
+ 'license = Public Domain',
+ ])))))
+ self.node_routes.stats_commit()
+ self.assertEqual([
+ (ts + 0, {'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0}),
+ (ts + 1, {'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 1.0}),
+ (ts + 2, {'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 0.0, 'topics': 2.0, 'posts': 0.0, 'users': 1.0}),
+ (ts + 3, {'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 0.0, 'topics': 3.0, 'posts': 0.0, 'users': 1.0}),
+ ],
+ this.call(method='GET', cmd='stats'))
+
+ def test_StatSolved(self):
+ ts = int(time.time())
+ volume = self.start_master(auth=RootAuth())
+ self.node_routes.stats_init('.', 1, ['RRA:AVERAGE:0.5:1:10'])
+
+ self.override(time, 'time', lambda: ts)
+ guid = this.call(method='POST', path=['context'], content={'title': '', 'summary': '', 'description': '', 'type': 'activity'})
+ this.call(method='POST', path=['context', guid, 'releases'], content=StringIO(
+ self.zips(('topdir/activity/activity.info', '\n'.join([
+ '[Activity]',
+ 'name = Activity',
+ 'bundle_id = %s' % guid,
+ 'exec = true',
+ 'icon = icon',
+ 'activity_version = 1',
+ 'license = Public Domain',
+ ])))))
+ this.call(method='GET', path=['context', guid], cmd='solve')
+ self.node_routes.stats_commit()
+ self.assertEqual([
+ (ts + 0, {'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 1.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0}),
+ ],
+ this.call(method='GET', cmd='stats'))
+
+ self.override(time, 'time', lambda: ts + 1)
+ this.call(method='POST', path=['user'], content={'name': '', 'pubkey': tests.PUBKEY})
+ self.node_routes.stats_commit()
+ self.assertEqual([
+ (ts + 0, {'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 1.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0}),
+ (ts + 1, {'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 1.0}),
+ ],
+ this.call(method='GET', cmd='stats'))
+
+ self.override(time, 'time', lambda: ts + 2)
+ this.call(method='GET', path=['context', guid], cmd='solve')
+ self.node_routes.stats_commit()
+ self.assertEqual([
+ (ts + 0, {'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 1.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0}),
+ (ts + 1, {'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 1.0}),
+ (ts + 2, {'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 1.0, 'topics': 1.0, 'posts': 0.0, 'users': 1.0}),
+ ],
+ this.call(method='GET', cmd='stats'))
+
+ self.override(time, 'time', lambda: ts + 3)
+ this.call(method='GET', path=['context', guid], cmd='solve')
+ self.node_routes.stats_commit()
+ self.assertEqual([
+ (ts + 0, {'contexts': 1.0, 'released': 1.0, 'reported': 0.0, 'solved': 1.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0}),
+ (ts + 1, {'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 1.0}),
+ (ts + 2, {'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 1.0, 'topics': 1.0, 'posts': 0.0, 'users': 1.0}),
+ (ts + 3, {'contexts': 1.0, 'released': 0.0, 'reported': 0.0, 'solved': 1.0, 'topics': 1.0, 'posts': 0.0, 'users': 1.0}),
+ ],
+ this.call(method='GET', cmd='stats'))
+
+ def test_StatReported(self):
+ ts = int(time.time())
+ volume = self.start_master(auth=RootAuth())
+ self.node_routes.stats_init('.', 1, ['RRA:AVERAGE:0.5:1:10'])
+
+ self.override(time, 'time', lambda: ts)
+ this.call(method='POST', path=['report'], content={'context': 'context', 'error': '', 'lsb_release': {}, 'uname': ''})
+ self.node_routes.stats_commit()
+ self.assertEqual([
+ (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 1.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
+ ],
+ this.call(method='GET', cmd='stats'))
+
+ self.override(time, 'time', lambda: ts + 1)
+ this.call(method='POST', path=['user'], content={'name': '', 'pubkey': tests.PUBKEY})
+ self.node_routes.stats_commit()
+ self.assertEqual([
+ (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 1.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
+ (ts + 1, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0}),
+ ],
+ this.call(method='GET', cmd='stats'))
+
+ self.override(time, 'time', lambda: ts + 2)
+ this.call(method='POST', path=['report'], content={'context': 'context', 'error': '', 'lsb_release': {}, 'uname': ''})
+ self.node_routes.stats_commit()
+ self.assertEqual([
+ (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 1.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
+ (ts + 1, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0}),
+ (ts + 2, {'contexts': 0.0, 'released': 0.0, 'reported': 1.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0}),
+ ],
+ this.call(method='GET', cmd='stats'))
+
+ self.override(time, 'time', lambda: ts + 3)
+ this.call(method='POST', path=['report'], content={'context': 'context', 'error': '', 'lsb_release': {}, 'uname': ''})
+ self.node_routes.stats_commit()
+ self.assertEqual([
+ (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 1.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
+ (ts + 1, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0}),
+ (ts + 2, {'contexts': 0.0, 'released': 0.0, 'reported': 1.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0}),
+ (ts + 3, {'contexts': 0.0, 'released': 0.0, 'reported': 1.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0}),
+ ],
+ this.call(method='GET', cmd='stats'))
+
+ def test_StatUsers(self):
+ ts = int(time.time())
+ volume = self.start_master(auth=RootAuth())
+ self.node_routes.stats_init('.', 1, ['RRA:AVERAGE:0.5:1:10'])
+
+ self.override(time, 'time', lambda: ts)
+ this.call(method='POST', path=['user'], content={'name': '', 'pubkey': tests.PUBKEY})
+ self.node_routes.stats_commit()
+ self.assertEqual([
+ (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0}),
+ ],
+ this.call(method='GET', cmd='stats'))
+
+ self.override(time, 'time', lambda: ts + 1)
+ this.call(method='POST', path=['user'], content={'name': '', 'pubkey': tests.PUBKEY2})
+ self.node_routes.stats_commit()
+ self.assertEqual([
+ (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0}),
+ (ts + 1, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 2.0}),
+ ],
+ this.call(method='GET', cmd='stats'))
+
+ self.override(time, 'time', lambda: ts + 2)
+ this.call(method='DELETE', path=['user', tests.UID])
+ self.node_routes.stats_commit()
+ self.assertEqual([
+ (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0}),
+ (ts + 1, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 2.0}),
+ (ts + 2, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0}),
+ ],
+ this.call(method='GET', cmd='stats'))
+
+ self.override(time, 'time', lambda: ts + 3)
+ this.call(method='DELETE', path=['user', tests.UID2])
+ self.node_routes.stats_commit()
+ self.assertEqual([
+ (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0}),
+ (ts + 1, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 2.0}),
+ (ts + 2, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 1.0}),
+ (ts + 3, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
+ ],
+ this.call(method='GET', cmd='stats'))
+
+ def test_StatTopics(self):
+ ts = int(time.time())
+ volume = self.start_master(auth=RootAuth())
+ self.node_routes.stats_init('.', 1, ['RRA:AVERAGE:0.5:1:10'])
+
+ self.override(time, 'time', lambda: ts)
+ guid1 = this.call(method='POST', path=['post'], content={'context': '', 'type': 'post', 'title': '', 'message': ''})
+ self.node_routes.stats_commit()
+ self.assertEqual([
+ (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0}),
+ ],
+ this.call(method='GET', cmd='stats'))
+
+ self.override(time, 'time', lambda: ts + 1)
+ guid2 = this.call(method='POST', path=['post'], content={'context': '', 'type': 'post', 'title': '', 'message': ''})
+ self.node_routes.stats_commit()
+ self.assertEqual([
+ (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0}),
+ (ts + 1, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 2.0, 'posts': 0.0, 'users': 0.0}),
+ ],
+ this.call(method='GET', cmd='stats'))
+
+ self.override(time, 'time', lambda: ts + 2)
+ this.call(method='DELETE', path=['post', guid1])
+ self.node_routes.stats_commit()
+ self.assertEqual([
+ (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0}),
+ (ts + 1, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 2.0, 'posts': 0.0, 'users': 0.0}),
+ (ts + 2, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0}),
+ ],
+ this.call(method='GET', cmd='stats'))
+
+ self.override(time, 'time', lambda: ts + 3)
+ this.call(method='DELETE', path=['post', guid2])
+ self.node_routes.stats_commit()
+ self.assertEqual([
+ (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0}),
+ (ts + 1, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 2.0, 'posts': 0.0, 'users': 0.0}),
+ (ts + 2, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 1.0, 'posts': 0.0, 'users': 0.0}),
+ (ts + 3, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
+ ],
+ this.call(method='GET', cmd='stats'))
+
+ def test_StatPosts(self):
+ ts = int(time.time())
+ volume = self.start_master(auth=RootAuth())
+ self.node_routes.stats_init('.', 1, ['RRA:AVERAGE:0.5:1:10'])
+
+ self.override(time, 'time', lambda: ts)
+ guid1 = this.call(method='POST', path=['post'], content={'topic': 'topic', 'context': '', 'type': 'post', 'title': '', 'message': ''})
+ self.node_routes.stats_commit()
+ self.assertEqual([
+ (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 1.0, 'users': 0.0}),
+ ],
+ this.call(method='GET', cmd='stats'))
+
+ self.override(time, 'time', lambda: ts + 1)
+ guid2 = this.call(method='POST', path=['post'], content={'topic': 'topic', 'context': '', 'type': 'post', 'title': '', 'message': ''})
+ self.node_routes.stats_commit()
+ self.assertEqual([
+ (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 1.0, 'users': 0.0}),
+ (ts + 1, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 2.0, 'users': 0.0}),
+ ],
+ this.call(method='GET', cmd='stats'))
+
+ self.override(time, 'time', lambda: ts + 2)
+ this.call(method='DELETE', path=['post', guid1])
+ self.node_routes.stats_commit()
+ self.assertEqual([
+ (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 1.0, 'users': 0.0}),
+ (ts + 1, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 2.0, 'users': 0.0}),
+ (ts + 2, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 1.0, 'users': 0.0}),
+ ],
+ this.call(method='GET', cmd='stats'))
+
+ self.override(time, 'time', lambda: ts + 3)
+ this.call(method='DELETE', path=['post', guid2])
+ self.node_routes.stats_commit()
+ self.assertEqual([
+ (ts + 0, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 1.0, 'users': 0.0}),
+ (ts + 1, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 2.0, 'users': 0.0}),
+ (ts + 2, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 1.0, 'users': 0.0}),
+ (ts + 3, {'contexts': 0.0, 'released': 0.0, 'reported': 0.0, 'solved': 0.0, 'topics': 0.0, 'posts': 0.0, 'users': 0.0}),
+ ],
+ this.call(method='GET', cmd='stats'))
+
+ def test_ReuseTotalsOnInitialStart(self):
+ volume = self.start_master(auth=RootAuth())
+ this.call(method='POST', path=['context'], content={'title': '', 'summary': '', 'description': '', 'type': 'activity'})
+ this.call(method='POST', path=['user'], content={'name': '', 'pubkey': tests.PUBKEY})
+ this.call(method='POST', path=['post'], content={'context': '', 'type': 'post', 'title': '', 'message': ''})
+ this.call(method='POST', path=['post'], content={'topic': 'topic', 'context': '', 'type': 'post', 'title': '', 'message': ''})
+
+ ts = int(time.time())
+ self.override(time, 'time', lambda: ts)
+ self.node_routes.stats_init('.', 1, ['RRA:AVERAGE:0.5:1:10'])
+ this.call(method='POST', path=['report'], content={'context': 'context', 'error': '', 'lsb_release': {}, 'uname': ''})
+ self.node_routes.stats_commit()
+ self.assertEqual([
+ (ts + 0, {'contexts': 1.0, 'released': 0.0, 'reported': 1.0, 'solved': 0.0, 'topics': 1.0, 'posts': 1.0, 'users': 1.0}),
+ ],
+ this.call(method='GET', cmd='stats'))
+
+ def test_StatContextRating(self):
+ ts = int(time.time())
+ volume = self.start_master(auth=RootAuth())
+ self.node_routes.stats_init('.', 1, ['RRA:AVERAGE:0.5:1:10'])
+
+ guid = this.call(method='POST', path=['context'], content={'title': '', 'summary': '', 'description': '', 'type': 'activity'})
+ self.node_routes.stats_commit()
+ self.assertEqual([0, 0], volume['context'][guid]['rating'])
+
+ post1 = this.call(method='POST', path=['post'], content={'context': guid, 'type': 'review', 'title': '', 'message': '', 'vote': 0})
+ self.node_routes.stats_commit()
+ self.assertEqual([1, 0], volume['context'][guid]['rating'])
+
+ post2 = this.call(method='POST', path=['post'], content={'context': guid, 'type': 'review', 'title': '', 'message': '', 'vote': 1})
+ self.node_routes.stats_commit()
+ self.assertEqual([2, 1], volume['context'][guid]['rating'])
+
+ post3 = this.call(method='POST', path=['post'], content={'context': guid, 'type': 'review', 'title': '', 'message': '', 'vote': 4})
+ self.node_routes.stats_commit()
+ self.assertEqual([3, 5], volume['context'][guid]['rating'])
+
+ this.call(method='DELETE', path=['post', post2])
+ self.node_routes.stats_commit()
+ self.assertEqual([2, 4], volume['context'][guid]['rating'])
+
+ this.call(method='DELETE', path=['post', post1])
+ self.node_routes.stats_commit()
+ self.assertEqual([1, 4], volume['context'][guid]['rating'])
+
+ this.call(method='DELETE', path=['post', post3])
+ self.node_routes.stats_commit()
+ self.assertEqual([0, 0], volume['context'][guid]['rating'])
+
+ def test_StatTopicRating(self):
+ ts = int(time.time())
+ volume = self.start_master(auth=RootAuth())
+ self.node_routes.stats_init('.', 1, ['RRA:AVERAGE:0.5:1:10'])
+
+ guid = this.call(method='POST', path=['post'], content={'context': '', 'type': 'post', 'title': '', 'message': ''})
+ self.assertEqual([0, 0], volume['post'][guid]['rating'])
+
+ self.node_routes.stats_commit()
+ self.assertEqual([0, 0], volume['post'][guid]['rating'])
+
+ post1 = this.call(method='POST', path=['post'], content={'context': '', 'topic': guid, 'type': 'post', 'title': '', 'message': '', 'vote': 0})
+ self.node_routes.stats_commit()
+ self.assertEqual([1, 0], volume['post'][guid]['rating'])
+
+ post2 = this.call(method='POST', path=['post'], content={'context': '', 'topic': guid, 'type': 'post', 'title': '', 'message': '', 'vote': 1})
+ self.node_routes.stats_commit()
+ self.assertEqual([2, 1], volume['post'][guid]['rating'])
+
+ post3 = this.call(method='POST', path=['post'], content={'context': '', 'topic': guid, 'type': 'post', 'title': '', 'message': '', 'vote': 4})
+ self.node_routes.stats_commit()
+ self.assertEqual([3, 5], volume['post'][guid]['rating'])
+
+ this.call(method='DELETE', path=['post', post2])
+ self.node_routes.stats_commit()
+ self.assertEqual([2, 4], volume['post'][guid]['rating'])
+
+ this.call(method='DELETE', path=['post', post1])
+ self.node_routes.stats_commit()
+ self.assertEqual([1, 4], volume['post'][guid]['rating'])
+
+ this.call(method='DELETE', path=['post', post3])
+ self.node_routes.stats_commit()
+ self.assertEqual([0, 0], volume['post'][guid]['rating'])
+
+
+if __name__ == '__main__':
+ tests.main()