From 74a464c9f2ffb4e726d68316609c571ab51465d2 Mon Sep 17 00:00:00 2001 From: Shawn Wilkinson Date: Sat, 30 May 2015 23:11:21 -0400 Subject: [PATCH] Challenge Gen Random Files --- .travis.yml | 1 + dataserv/Challenge.py | 17 +++++++++++++---- tests/test_Challenge.py | 12 ++++++++++-- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index f827d28..2a401fa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,6 +12,7 @@ before_script: - python dataserv/app.py & - touch dataserv.db - touch dataserv_test.db + - mkdir data # run tests, e.g. python setup.py test script: diff --git a/dataserv/Challenge.py b/dataserv/Challenge.py index b75ebd5..4f7a3a5 100644 --- a/dataserv/Challenge.py +++ b/dataserv/Challenge.py @@ -1,14 +1,17 @@ import random +from RandomIO import RandomIO from dataserv.Farmer import sha256 class Challenge: - def __init__(self, btc_addr, height): + def __init__(self, btc_addr, height, shard_size): self.btc_addr = btc_addr self.height = height + self.shard_size = shard_size # in bytes - self.seeds = self.gen_seeds() + self.seed = None self.challenge = None + self.seed_list = self.gen_seeds() def gen_seeds(self): """Generate a list of seeds for challenges based on the Bitcoin address.""" @@ -21,7 +24,13 @@ def gen_seeds(self): def pick_seed(self): """Generate a random challenge for the Farmer.""" - return random.choice(self.seeds) + self.seed = random.choice(self.seed_list) + return self.seed def get_seeds(self): - return self.seeds + """Accessor for the challenge seeds.""" + return self.seed_list + + def gen_shard(self, seed, path): + return RandomIO(seed).genfile(self.shard_size, path) + diff --git a/tests/test_Challenge.py b/tests/test_Challenge.py index c6f089f..514f127 100644 --- a/tests/test_Challenge.py +++ b/tests/test_Challenge.py @@ -1,3 +1,4 @@ +import os import unittest from dataserv.Challenge import Challenge @@ -5,7 +6,7 @@ class ChallengeTest(unittest.TestCase): def test_seeds(self): addr = '191GVvAaTRxLmz3rW3nU5jAV1rF186VxQc' - chal = Challenge(addr, 100) + chal = Challenge(addr, 100, 50) iter0 = '66357e60899acae95ce1e31def3d7b32a73d34b2f12ece73cdca025a26e17e32' iter3 = '96a6cb8668775a1751d7cf1d59cd0a8d3bc67e8ed5e6f5fce0376d5e04284071' @@ -17,5 +18,12 @@ def test_seeds(self): def test_challenge(self): addr = '191GVvAaTRxLmz3rW3nU5jAV1rF186VxQc' - chal = Challenge(addr, 100) + chal = Challenge(addr, 100, 50) self.assertTrue(chal.pick_seed() in chal.get_seeds()) + + def test_shard(self): + addr = '191GVvAaTRxLmz3rW3nU5jAV1rF186VxQc' + chal = Challenge(addr, 100, 10*1024*1024) # 10 MB + seed = chal.pick_seed() + path = chal.gen_shard(seed, 'data/') + os.remove(path) \ No newline at end of file