Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also .

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also .
base repository: gsathya/pyonionoo
base: master
head repository: gsathya/pyonionoo
compare: tests2
Checking mergeability… Don’t worry, you can still create the pull request.
  • 3 commits
  • 4 files changed
  • 0 comments
  • 1 contributor
Commits on Dec 12, 2012
.ropeproject, .#* are all emacs files
_test_trial is a temp folder created by twisted
Showing with 136 additions and 0 deletions.
  1. +3 −0 .gitignore
  2. +4 −0 tests/data/summary
  3. +77 −0 tests/test_unparameterized.py
  4. +52 −0 tests/utils.py
@@ -1,3 +1,6 @@
*.swp
*.pyc
.#*
.ropeproject
_trial_temp
dropin.cache
@@ -0,0 +1,4 @@
r sumkledi 0013D22389CD50D0B784A3E4061CB31E8CE8CEB5 178.218.213.229;; 2012-07-03 07:00:00 80 0 Exit,Fast,Running,Valid 26 ru 178.218.213.229 1341285307613
r Unnamed 0036D8A9212508D2C963B4BA965FF33FEF9842EB 85.141.74.20;; 2012-06-30 01:00:00 10582 15228 Exit,Fast,Running,V2Dir,Valid 56 ru ppp85-141-74-20.pppoe.mtu-net.ru 1341296110373
b TSPIDER FF62690E83AA32852E2079AC6A65D65953E57498 10.252.163.42;; 2012-07-03 07:07:04 9001 0 Fast,Guard,Running,Stable,Valid -1 ?? null -1
b obfsabox FFDE7B45014B150E61B26DC72764386D416E8956 10.137.205.100;; 2012-07-03 07:07:04 9001 0 Fast,Guard,Running,Stable,Valid -1 ?? null -1
@@ -0,0 +1,77 @@
from itertools import cycle

import cyclone.httpclient

from utils import *

from cyclone.escape import json_decode
from cyclone.httputil import url_concat
from twisted.internet import defer
from twisted.trial import unittest

host = "localhost"
port = 8888
base_url = "http://%s:%s" % (host, port)
content_type = 'application/json'
response_code = 200

class TestUnparameterizedRequests(unittest.TestCase):
def setUp(self):
self.relays, self.bridges = {}, {}

self.relays['nicknames'] = ['sumkledi', 'Unnamed']
self.bridges['nicknames'] = ['TSPIDER', 'obfsabox']

self.relays['fingerprint'] = ['0013D22389CD50D0B784A3E4061CB31E8CE8CEB5', '0036D8A9212508D2C963B4BA965FF33FEF9842EB']
self.bridges['fingerprint'] = ['FF62690E83AA32852E2079AC6A65D65953E57498', 'FFDE7B45014B150E61B26DC72764386D416E8956']

self.relays['running'] = [True, True]
self.bridges['running'] = [True, True]

@defer.inlineCallbacks
def test_summary(self):
url = "%s/%s" % (base_url, 'summary')
response = yield cyclone.httpclient.fetch(url)
data = json_decode(response.body)

self.assertEqual(4, number_of_relays(data)+number_of_bridges(data))
self.assertEqual("2012-07-03 07:00:00", data['relays_published'])
self.assertEqual("2012-07-03 07:07:04", data['bridges_published'])

# check if nicknames are alphanumeric
self.assertEqual([], filter(lambda x: not x['n'].isalnum(), data['relays']))
self.assertEqual([], filter(lambda x: not x['n'].isalnum(), data['bridges']))

# check if nicknames are 1-19 chars
self.assertEqual([], filter(lambda x: not 0<len(x['n'])<20, data['relays']))
self.assertEqual([], filter(lambda x: not 0<len(x['n'])<20, data['bridges']))

# check if nicknames are correct
self.assertEqual([], filter(lambda (x, y): x['n']!=y, zip(data['relays'], self.relays['nicknames'])))
self.assertEqual([], filter(lambda (x, y): x['n']!=y, zip(data['bridges'], self.bridges['nicknames'])))

# check if fp are correct
self.assertEqual([], filter(lambda (x, y): x['f']!=y, zip(data['relays'], self.relays['fingerprint'])))
self.assertEqual([], filter(lambda (x, y): x['f']!=y, zip(data['bridges'], self.bridges['fingerprint'])))

# check if fp is all upper case
self.assertEqual([], filter(lambda x: not x['f'].isupper(), data['relays']))
self.assertEqual([], filter(lambda x: not x['f'].isupper(), data['bridges']))

# check if fp is 40 chars
self.assertEqual([], filter(lambda x: len(x['f'])!=40, data['relays']))
self.assertEqual([], filter(lambda x: len(x['f'])!=40, data['bridges']))

# check if ips are equal
pass

# check if ipv6 ips are lowercase
pass

# check if running fields are correct
self.assertEqual([], filter(lambda (x, y): x['r']!=y, zip(data['relays'], self.relays['running'])))
self.assertEqual([], filter(lambda (x, y): x['r']!=y, zip(data['bridges'], self.bridges['running'])))

# check no additional fields are present - change to 4 when test data is updated
self.assertEqual([], filter(lambda (x, y): len(x)!=y, zip(data['relays'], cycle([3]))))
self.assertEqual([], filter(lambda (x, y): len(x)!=y, zip(data['bridges'], cycle([3]))))
@@ -0,0 +1,52 @@
import json

def has_fp(relay_fp, data, relay=True):
"""
relay_fp - fingerprint of relay
data - JSON object
relay - relay or bridge
"""

if relay: relay_type = "relays"
else: relay_type = "bridges"

for relay in data[relay_type]:
if relay_fp in relay.values(): return True

return False

def number_of_relays(data):
"""
data - JSON object
"""

return len(data['relays'])

def number_of_bridges(data):
"""
data - JSON object
"""

return len(data['bridges'])

def check_flag(relay, flag):
"""
relay - relay info
flag - flag to check
"""

if flag in relay['flags']: return True
return False

def contains_required_fields(data):
"""
relays_published, bridges_published, relays, bridges
are required fields.
"""

required_fields = set(["relays_published", "bridges_published",
"relays", "bridges"])

if set(data.keys()) == required_fields:
return True
return False

No commit comments for this range