Skip to content

Commit

Permalink
Merge pull request #9 from F483/master
Browse files Browse the repository at this point in the history
fixed tools/client and added tests (issue #8)
  • Loading branch information
super3 committed Jun 25, 2015
2 parents 0356172 + 0ea0c41 commit 0fa10bf
Show file tree
Hide file tree
Showing 2 changed files with 118 additions and 37 deletions.
64 changes: 64 additions & 0 deletions tests/test_client.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import os
import unittest
from multiprocessing import Process
from dataserv.app import app, db
from tools import client
import time

port = "8000"
host="127.0.0.1"
url = "http://%s:%s" % (host, port)
dbpath = 'dataserv.db' # TODO get from config
address_alpha = "13wENBbYbNW9KczZSQXyVogzB15jyVmmKS"
address_beta = "15JPEyzUgBKYJSrtHQ9g5kVbm8hghLhv1b"
address_gamma = "1DauYnqSjZbRSfUoderYgTLdjCjBuyENWA"


def start_test_server():

# remove previous db
try:
os.remove(dbpath)
except OSError:
pass # file does not exist

# create schema
db.create_all()

# start server
app.run(host=host, port=int(port), debug=True)


class TestClient(unittest.TestCase):

def setUp(self):
self.server = Process(target=start_test_server)
self.server.start()
time.sleep(5)

def tearDown(self):
self.server.terminate()
self.server.join()

def test_register(self):
self.assertTrue(client.register(address_alpha, url=url))

def test_already_registered(self):
def callback():
client.register(address_beta, url=url)
client.register(address_beta, url=url)
self.assertRaises(client.AddressAlreadyRegistered, callback)

def test_register_invalid_address(self):
def callback():
client.register("xyz", url=url)
self.assertRaises(client.InvalidAddress, callback)

def test_ping_invalid_address(self):
def callback():
client.ping("xyz", url=url)
self.assertRaises(client.InvalidAddress, callback)


if __name__ == '__main__':
unittest.main()
91 changes: 54 additions & 37 deletions tools/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,42 @@
import urllib.request


# config vars
url = "http://104.236.104.117"
address = "YOUR ADDRESS HERE"
alive_delay = 15 # seconds
class AddressAlreadyRegistered(Exception):

def __init__(self, address, url):
msg = "Address {0} already registered at {1}!".format(address, url)
super(AddressAlreadyRegistered, self).__init__(msg)

def registration():

class FarmerNotFound(Exception):

def __init__(self, url):
msg = "Farmer not found at {0}!".format(url)
super(FarmerNotFound, self).__init__(msg)


class FarmerError(Exception):

def __init__(self, url):
msg = "Farmer error at {0}!".format(url)
super(FarmerError, self).__init__(msg)


class InvalidAddress(Exception):

def __init__(self, address):
msg = "Address {0} not valid!".format(address)
super(InvalidAddress, self).__init__(msg)


class ConnectionError(Exception):

def __init__(self, url):
msg = "Could not connect to server {0}!".format(url)
super(ConnectionError, self).__init__(msg)


def register(address, url="http://104.236.104.117"):
"""Attempt to register the config address."""

try:
Expand All @@ -22,55 +51,43 @@ def registration():

except urllib.error.HTTPError as e:
if e.code == 409:
print("Address {0} already registered.".format(address))
return True

raise AddressAlreadyRegistered(address, url)
elif e.code == 404:
raise FarmerNotFound(url)
elif e.code == 400:
print("Address is not valid.")
return False

raise InvalidAddress(address) # TODO test
elif e.code == 500:
raise FarmerError(url)
else:
raise e
except urllib.error.URLError:
print("Could not connect to server.")
time.sleep(15)
return True
raise ConnectionError(url)

except ConnectionResetError:
print("Could not connect to server.")
time.sleep(15)
return True


def keep_alive(delay):
def ping(address, url="http://104.236.104.117"):
"""Attempt keep-alive with the server."""
try:
api_call = "{0}/api/ping/{1}".format(url, address)
response = urllib.request.urlopen(api_call)
print("Pinging {0} with address {1}.".format(url, address))
time.sleep(delay)
return True

except urllib.error.HTTPError as e:
if e.code == 400:
print("Address is not valid.")

raise InvalidAddress(address) # TODO test
elif e.code == 404:
print("Farmer not found.")

raise FarmerNotFound(url)
elif e.code == 500:
print("Server Error.")

raise FarmerError(url)
else:
raise e
except urllib.error.URLError:
print("Could not connect to server.")
raise ConnectionError(url)

except ConnectionResetError:
print("Could not connect to server.")

return False
def keep_alive(address, delay=15):
register(address)
while ping(address):
time.sleep(delay)


if __name__ == "__main__":
# attempt to register user
while registration():
# keep-alive with server
while keep_alive(alive_delay):
pass

0 comments on commit 0fa10bf

Please sign in to comment.