Esempio n. 1
0
def test_get_nonexisting():
    for provider in providers:
        provider.wipe()

    FD = FileDistributor(providers, len(providers), 3)
    try:
        FD.get("test", "dummy")
        assert False
    except exceptions.FatalOperationFailure as e:
        assert len(e.failures) == 5
Esempio n. 2
0
def test_corrupt_fail():
    FD = FileDistributor(providers, len(providers), 3)
    key = FD.put("test", "data")
    providers[0].wipe()
    providers[1].wipe()
    providers[2].wipe()
    try:
        FD.get("test", key)
        assert False
    except exceptions.FatalOperationFailure as e:
        assert len(e.failures) == 3
Esempio n. 3
0
def test_mutate_small_k_recover():
    # the third share is bad!
    shares = [
        '\x00\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00,\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x01\x00\xcc^\x0c\x0b\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5D`\xc7(\x90]Aq\x880\xb5\xdd\x1c\x0c2\x8a-\x7fZ\x1dp',
        '\x01\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00,\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x01\x00\xcc^\x0c\x0b\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00v $SAJ\xcc\x1c)\xbci\x08\x16Hj\x10 \xea\xb5%\xd8\xa1',
        '\x00\x00\x00\x00\x13\x00\xd0\x00\x00\x00\x00\x00,\x00\xe2\x00R\x00\x00\x00\x01\x00\x00\x00\xdd\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x00\x00\x00\x00[\x00\x00\x00\x00\x00\x00\x00\x00\x00(\x00\x00\x00\x06\x00\x00\x01\x96\x00^\x0c\x0b\x02\x01\x01\xa5\x00\xb2\x00A\x00\x10\x00\xa8\x00\x00\x00\xf9\x00\x1dP\xf8\xc10\x00=\xdc>)\x7f\xb7c\x00\xb3\x03',
        '\x03\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00,\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x01\x00\xcc^\x0c\x0b\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf2\xb8\x0f\x0fT\x07\xc5\x9cf\x9a\x81\xadr\x8b\xae\xcb\xc5Y9#\xdb^',
        '\x04\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00,\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x01\x00\xcc^\x0c\x0b\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x8d\xe3\xff\xf14\x7f\xfa\xc1\xe0\x89\xdfK\xb5\xc0v\xd5\xb2\xeb\xa5\x9c\xc3'
    ]
    key = "%\xae\xbc\x15\t)\xb7\x19\x89\xe4^\xdd\xda>[J\xb1\xaag\x8f\x94\x9b\xe3\xad\xd8*{D\xf8.\xb4\xdf"

    FD = FileDistributor(providers, len(providers), 2)
    data, bad_shares = FD._recover(shares, key)

    assert data == "data"
    assert bad_shares == [shares[2]]
Esempio n. 4
0
def test_mutate_fail():
    # shares at indices 2, 3 and 4 are bad!
    shares = [
        '\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00,\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x01\x00\xcc^\x0c\x0b\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x0eu\xa7\\\xef\xdb\rg\xab,hI\xdb\x14\xe1',
        '\x01\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00,\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x01\x00\xcc^\x0c\x0b\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00f\xc3_\xa1\xa29c\x19w\xfc\xdeI\xf4\xd1/%',
        '\x02\x00\x00\x00\x10\x00\x00\x00"\x00\x00\x00\x92\x00\x00\x00\x00\x00\x00\x00\xbf\x00\x00\x00Z\x00\x00\x00\x00\x00\x00\x00\xe4\x00\xbd\x00\x9d\x00\x00\x00\x00\x00\x00\x006\x00\xde\x00\x00\x00\x00\x00\x00\x00L\x00\x00\x01\x00\xcc^\x0c\x0b\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00~\x00\x00\x00\x87tk\x80\xea\x00\x8c\x0fC\xe1\x9a\x00\x1d\x00h\x00',
        '\r\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00,\x00\x00\x00}\x00\x00\x00\x01\x00\x00\x00\x00\x00\xe5\x00\xbe\x00\x00\x00F\x00\xf5\x00\x00\x00\x00\x00\xde\x00\x00\x00\x00\x00\xfa\x00\x00\x00\x00\x00\x00\x00\x06\x00\xbe\x00\x00\xcc^\x0c\x0b\x02\xbb\x009\x00-\x00\x0e\x00\x00\x00\x00\x00\x00\x00s\x00\xc1\xb90\x00O\xcbe\x00S\xb6\xb0*\xbd\n}\x00',
        '\x04\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00,\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x01\x00\xcc^\x0c\x0b\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\xf3\x0baD\xef6\xe9\xa5"\x9f\xd8,\x01u\x98\xc6'
    ]
    key = "%\xae\xbc\x15\t)\xb7\x19\x89\xe4^\xdd\xda>[J\xb1\xaag\x8f\x94\x9b\xe3\xad\xd8*{D\xf8.\xb4\xdf"
    for share, provider in zip(shares, providers):
        provider.put("test", share)

    FD = FileDistributor(providers, len(providers), 3)

    with pytest.raises(exceptions.FatalOperationFailure):
        FD.get("test", key)
Esempio n. 5
0
def test_delete():
    FD = FileDistributor(providers, len(providers), 3)
    key = FD.put("test", "data")
    FD.delete("test")
    try:
        FD.get("test", key)
        assert False
    except exceptions.FatalOperationFailure as e:
        assert len(e.failures) == 5
Esempio n. 6
0
def test_mutate_two_recover():
    # shares at indices 2 and 3 are bad!
    shares = [
        '\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00,\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x01\x00\xcc^\x0c\x0b\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 \x0eu\xa7\\\xef\xdb\rg\xab,hI\xdb\x14\xe1',
        '\x01\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00,\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x01\x00\xcc^\x0c\x0b\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00f\xc3_\xa1\xa29c\x19w\xfc\xdeI\xf4\xd1/%',
        '\x02\x00\x00\x00\x10\x00\x00\x00"\x00\x00\x00\x92\x00\x00\x00\x00\x00\x00\x00\xbf\x00\x00\x00Z\x00\x00\x00\x00\x00\x00\x00\xe4\x00\xbd\x00\x9d\x00\x00\x00\x00\x00\x00\x006\x00\xde\x00\x00\x00\x00\x00\x00\x00L\x00\x00\x01\x00\xcc^\x0c\x0b\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00~\x00\x00\x00\x87tk\x80\xea\x00\x8c\x0fC\xe1\x9a\x00\x1d\x00h\x00',
        '\r\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00,\x00\x00\x00}\x00\x00\x00\x01\x00\x00\x00\x00\x00\xe5\x00\xbe\x00\x00\x00F\x00\xf5\x00\x00\x00\x00\x00\xde\x00\x00\x00\x00\x00\xfa\x00\x00\x00\x00\x00\x00\x00\x06\x00\xbe\x00\x00\xcc^\x0c\x0b\x02\xbb\x009\x00-\x00\x0e\x00\x00\x00\x00\x00\x00\x00s\x00\xc1\xb90\x00O\xcbe\x00S\xb6\xb0*\xbd\n}\x00',
        '\x04\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00,\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x01\x00\xcc^\x0c\x0b\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf3\x0baD\xee6\xe9\xa5"\x9f\xd8,\x01u\x98\xc6'
    ]
    key = "%\xae\xbc\x15\t)\xb7\x19\x89\xe4^\xdd\xda>[J\xb1\xaag\x8f\x94\x9b\xe3\xad\xd8*{D\xf8.\xb4\xdf"
    for share, provider in zip(shares, providers):
        provider.put("test", share)

    FD = FileDistributor(providers, len(providers), 3)

    with pytest.raises(exceptions.OperationFailure) as excinfo:
        FD.get("test", key)
    assert excinfo.value.result == "data"
    assert sorted([f.provider for f in excinfo.value.failures
                   ]) == sorted([providers[2], providers[3]])
Esempio n. 7
0
def test_mutate_recover():
    # the first share is bad!
    shares = [
        '\x00\x00\x00\x00\x13\x00\xd0\x00\x00\x00\x00\x00,\x00\xe2\x00R\x00\x00\x00\x01\x00\x00\x00\xdd\x00\x00\x00\x00\x00\x00\x00\x87\x00\x00\x00\x00\x00\x00\x00[\x00\x00\x00\x00\x00\x00\x00\x00\x00(\x00\x00\x00\x06\x00\x00\x01\x96\x00^\x0c\x0b\x02\x01\x01\xa5\x00\xb2\x00A\x00\x10\x00\xa8\x00\x00\x00\xf9\x00\x1dP\xf8\xc10\x00=\xdc>)\x7f\xb7c\x00\xb3\x03',
        '\x01\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00,\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x01\x00\xcc^\x0c\x0b\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x08\xdcW\x1c\xaco\xba<\xff\x87\xca\xa2\xf1\xdc\x0c',
        '\x02\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00,\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x01\x00\xcc^\x0c\x0b\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8eN6\xc2(\x8eI\x13\xd2\xbd\xdf8\x00\x00\x00\x00',
        "\x03\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00,\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x01\x00\xcc^\x0c\x0b\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x16\x12Toj\x1bu\xd0k'EP\x04o\x0f",
        '\x04\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00,\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x01\x00\xcc^\x0c\x0b\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00Q\xf3P8n\xaf\x9e]a\xb3\x7fyH\xcbaq'
    ]
    key = "%\xae\xbc\x15\t)\xb7\x19\x89\xe4^\xdd\xda>[J\xb1\xaag\x8f\x94\x9b\xe3\xad\xd8*{D\xf8.\xb4\xdf"
    for share, provider in zip(shares, providers):
        provider.put("test", share)

    FD = FileDistributor(providers, len(providers), 3)

    with pytest.raises(exceptions.OperationFailure) as excinfo:
        FD.get("test", key)

    assert excinfo.value.result == "data"
    assert len(excinfo.value.failures) == 1
    assert excinfo.value.failures[0].provider == providers[0]
Esempio n. 8
0
def test_update():
    FD = FileDistributor(providers, len(providers), 3)
    key = FD.put("test", "data")
    key = FD.put("test", "other")
    assert FD.get("test", key) == "other"
Esempio n. 9
0
def test_roundtrip_with_key():
    key = generate_key()
    FD = FileDistributor(providers, len(providers), 3)
    FD.put("test", "data", key)
    assert FD.get("test", key) == "data"
Esempio n. 10
0
def test_roundtrip():
    FD = FileDistributor(providers, len(providers), 3)
    key = FD.put("test", "data")
    key2 = FD.put("another", "data2")
    assert FD.get("test", key) == "data"
    assert FD.get("another", key2) == "data2"
Esempio n. 11
0
def test_missing_providers():
    FD = FileDistributor(providers, len(providers), 3)
    key = FD.put("test", "data")
    FD = FileDistributor(providers[0:3], len(providers), 3)
    assert FD.get("test", key) == "data"
Esempio n. 12
0
def test_multiple_sessions():
    FD = FileDistributor(providers, len(providers), 3)
    key = FD.put("test", "data")
    FD = FileDistributor(providers, len(providers), 3)
    assert FD.get("test", key) == "data"
Esempio n. 13
0
def test_wrong_key():
    wrong_key = generate_key()
    FD = FileDistributor(providers, len(providers), 3)
    FD.put("test", "data")
    with pytest.raises(exceptions.FatalOperationFailure):
        FD.get("test", wrong_key)