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
+ def test_ipfs_node_available ():
41
+ addr = "[{0}]:{1}" .format (ipfsApi .default_host , ipfsApi .default_port )
42
+ unittest .TestCase ().assertTrue (
43
+ is_available (),
44
+ "Functional tests require an IPFS node to be available at: " + addr
45
+ )
46
+
47
+
48
+
10
49
HERE = os .path .dirname (os .path .abspath (__file__ ))
11
50
51
+ @skipIfOffline ()
12
52
class IpfsApiTest (unittest .TestCase ):
13
53
14
54
api = ipfsApi .Client ()
@@ -177,6 +217,7 @@ def test_cat_single_file_str(self):
177
217
self .assertEqual ("dsadsad\n " , res )
178
218
179
219
220
+ @skipIfOffline ()
180
221
class IpfsApiLogTest (unittest .TestCase ):
181
222
182
223
def setUp (self ):
@@ -215,6 +256,7 @@ def test_log_tail(self):
215
256
self .assertTrue (type (log ) is dict )
216
257
217
258
259
+ @skipIfOffline ()
218
260
class IpfsApiPinTest (unittest .TestCase ):
219
261
220
262
fake_dir_hash = 'QmYqqgRahxbZvudnzDu2ZzUS1vFSNEuCrxghM8hgT8uBFY'
@@ -288,6 +330,7 @@ def test_pin_ls_add_rm_directory(self):
288
330
pins_after_rm [self .fake_dir_hash ]['Type' ] == 'recursive' )
289
331
290
332
333
+ @skipIfOffline ()
291
334
class IpfsApiMFSTest (unittest .TestCase ):
292
335
293
336
test_files = {
@@ -328,6 +371,7 @@ def test_write_stat_read_delete(self):
328
371
self .api .files_rm (target )
329
372
330
373
374
+ @skipIfOffline ()
331
375
class TestBlockFunctions (unittest .TestCase ):
332
376
def setUp (self ):
333
377
self .api = ipfsApi .Client ()
@@ -354,6 +398,7 @@ def test_block_put(self):
354
398
self .assertEqual (res ['Key' ], expected_block_multihash )
355
399
356
400
401
+ @skipIfOffline ()
357
402
class IpfsApiRepoTest (unittest .TestCase ):
358
403
359
404
def setUp (self ):
@@ -381,6 +426,7 @@ def test_repo_gc(self):
381
426
self .assertTrue (garbage in keys )
382
427
383
428
429
+ @skipIfOffline ()
384
430
class IpfsApiObjectTest (unittest .TestCase ):
385
431
386
432
def setUp (self ):
0 commit comments