1
1
# _*_ coding: utf-8 -*-
2
2
import os
3
- import shutil
4
3
import json
4
+ import shutil
5
+ import socket
6
+ import sys
5
7
import unittest
8
+ import logging
6
9
7
10
import ipfsApi
8
11
9
12
13
+ __is_available = NotImplemented
14
+ def is_available ():
15
+ """
16
+ Return whether the IPFS daemon is reachable or not
17
+ """
18
+ global __is_available
19
+
20
+ if not isinstance (__is_available , bool ):
21
+ s = socket .socket ()
22
+ try :
23
+ s .connect ((ipfsApi .default_host , ipfsApi .default_port ))
24
+ except IOError :
25
+ __is_available = False
26
+ else :
27
+ __is_available = True
28
+ finally :
29
+ s .close ()
30
+
31
+ return __is_available
32
+
33
+
34
+ def skipIfOffline ():
35
+ if is_available ():
36
+ return lambda func : func
37
+ else :
38
+ return unittest .skip ("IPFS node is not available" )
39
+
40
+
41
+ def test_ipfs_node_available ():
42
+ addr = "[{0}]:{1}" .format (ipfsApi .default_host , ipfsApi .default_port )
43
+ assert is_available (), "Functional tests require an IPFS node to be available at: " + addr
44
+
45
+
46
+
10
47
HERE = os .path .dirname (os .path .abspath (__file__ ))
11
48
49
+ @skipIfOffline ()
12
50
class IpfsApiTest (unittest .TestCase ):
13
51
14
52
api = ipfsApi .Client ()
@@ -177,6 +215,7 @@ def test_cat_single_file_str(self):
177
215
self .assertEqual ("dsadsad\n " , res )
178
216
179
217
218
+ @skipIfOffline ()
180
219
class IpfsApiLogTest (unittest .TestCase ):
181
220
182
221
def setUp (self ):
@@ -215,6 +254,7 @@ def test_log_tail(self):
215
254
self .assertTrue (type (log ) is dict )
216
255
217
256
257
+ @skipIfOffline ()
218
258
class IpfsApiPinTest (unittest .TestCase ):
219
259
220
260
fake_dir_hash = 'QmYqqgRahxbZvudnzDu2ZzUS1vFSNEuCrxghM8hgT8uBFY'
@@ -288,6 +328,7 @@ def test_pin_ls_add_rm_directory(self):
288
328
pins_after_rm [self .fake_dir_hash ]['Type' ] == 'recursive' )
289
329
290
330
331
+ @skipIfOffline ()
291
332
class IpfsApiMFSTest (unittest .TestCase ):
292
333
293
334
test_files = {
@@ -328,6 +369,7 @@ def test_write_stat_read_delete(self):
328
369
self .api .files_rm (target )
329
370
330
371
372
+ @skipIfOffline ()
331
373
class TestBlockFunctions (unittest .TestCase ):
332
374
def setUp (self ):
333
375
self .api = ipfsApi .Client ()
@@ -354,6 +396,7 @@ def test_block_put(self):
354
396
self .assertEqual (res ['Key' ], expected_block_multihash )
355
397
356
398
399
+ @skipIfOffline ()
357
400
class IpfsApiRepoTest (unittest .TestCase ):
358
401
359
402
def setUp (self ):
@@ -381,6 +424,7 @@ def test_repo_gc(self):
381
424
self .assertTrue (garbage in keys )
382
425
383
426
427
+ @skipIfOffline ()
384
428
class IpfsApiObjectTest (unittest .TestCase ):
385
429
386
430
def setUp (self ):
0 commit comments