1
1
from __future__ import absolute_import
2
+
2
3
import json
3
- import os
4
4
import unittest
5
+
6
+ import os
5
7
from functools import partial
6
8
9
+ import pytest
10
+ from six import StringIO
11
+
7
12
import cwltool .pack
8
- from cwltool .main import print_pack as print_pack
9
13
import cwltool .workflow
10
14
from cwltool .load_tool import fetch_document , validate_document
11
- from cwltool .main import makeRelative
15
+ from cwltool .main import makeRelative , main , print_pack
12
16
from cwltool .pathmapper import adjustDirObjs , adjustFileObjs
13
-
17
+ from cwltool . utils import onWindows
14
18
from .util import get_data
15
19
16
20
17
21
class TestPack (unittest .TestCase ):
22
+ maxDiff = None
23
+
18
24
def test_pack (self ):
19
- self .maxDiff = None
20
25
21
26
document_loader , workflowobj , uri = fetch_document (
22
27
get_data ("tests/wf/revsort.cwl" ))
@@ -38,8 +43,6 @@ def test_pack(self):
38
43
def test_pack_missing_cwlVersion (self ):
39
44
"""Test to ensure the generated pack output is not missing
40
45
the `cwlVersion` in case of single tool workflow and single step workflow"""
41
- # Since diff is longer than 3174 characters
42
- self .maxDiff = None
43
46
44
47
# Testing single tool workflow
45
48
document_loader , workflowobj , uri = fetch_document (
@@ -76,7 +79,6 @@ def test_pack_idempotence_workflow(self):
76
79
self ._pack_idempotently ("tests/wf/count-lines1-wf.cwl" )
77
80
78
81
def _pack_idempotently (self , document ):
79
- self .maxDiff = None
80
82
document_loader , workflowobj , uri = fetch_document (
81
83
get_data (document ))
82
84
document_loader , avsc_names , processobj , metadata , uri = validate_document (
@@ -89,3 +91,28 @@ def _pack_idempotently(self, document):
89
91
document_loader , workflowobj , uri )
90
92
double_packed = json .loads (print_pack (document_loader , processobj , uri2 , metadata ))
91
93
self .assertEqual (packed , double_packed )
94
+
95
+ @pytest .mark .skipif (onWindows (),
96
+ reason = "Instance of cwltool is used, on Windows it invokes a default docker container"
97
+ "which is not supported on AppVeyor" )
98
+ def test_packed_workflow_execution (self ):
99
+ test_wf = "tests/wf/count-lines1-wf.cwl"
100
+ test_wf_job = "tests/wf/wc-job.json"
101
+ document_loader , workflowobj , uri = fetch_document (
102
+ get_data (test_wf ))
103
+ document_loader , avsc_names , processobj , metadata , uri = validate_document (
104
+ document_loader , workflowobj , uri )
105
+ packed = json .loads (print_pack (document_loader , processobj , uri , metadata ))
106
+ temp_packed_path = "/tmp/packedwf"
107
+ with open (temp_packed_path , 'w' ) as f :
108
+ json .dump (packed , f )
109
+ normal_output = StringIO ()
110
+ packed_output = StringIO ()
111
+ self .assertEquals (main (['--debug' , get_data (temp_packed_path ),
112
+ get_data (test_wf_job )],
113
+ stdout = packed_output ), 0 )
114
+ self .assertEquals (main ([get_data (test_wf ),
115
+ get_data (test_wf_job )],
116
+ stdout = normal_output ), 0 )
117
+ self .assertEquals (json .loads (packed_output .getvalue ()), json .loads (normal_output .getvalue ()))
118
+
0 commit comments