77
88set_test_environment ()
99
10- from cloudharness .workflows import operations , tasks
10+ from cloudharness .workflows import operations , tasks , utils
1111from cloudharness import set_debug
1212from cloudharness .workflows import argo
1313from cloudharness .utils .config import CloudharnessConfig
@@ -23,7 +23,12 @@ def check_wf(wf):
2323
2424 assert wf ["kind" ] == "Workflow"
2525 assert "spec" in wf
26-
26+
27+ def test_volume_affinity_check ():
28+ assert not utils .volume_requires_affinity ("a" )
29+ assert utils .volume_requires_affinity ("a:b" )
30+ assert utils .volume_requires_affinity ("a:b:ro" )
31+ assert not utils .volume_requires_affinity ("a:b:rwx" )
2732
2833def test_sync_workflow ():
2934 def f ():
@@ -119,9 +124,44 @@ def test_single_task_shared():
119124 if accounts_offset == 1 :
120125 assert wf ['spec' ]['volumes' ][1 ]['secret' ]['secretName' ] == 'accounts'
121126 assert len (wf ['spec' ]['templates' ][0 ]['container' ]['volumeMounts' ]) == 2 + accounts_offset
127+ assert wf ['spec' ]['templates' ][0 ]['metadata' ]['labels' ]['usesvolume' ] == 'myclaim'
128+
129+ affinity_glob = \
130+ wf ['spec' ]['affinity' ]['podAffinity' ]['requiredDuringSchedulingIgnoredDuringExecution' ][0 ]['labelSelector' ][
131+ 'matchExpressions' ][0 ]
132+ assert affinity_glob ['key' ] == 'usesvolume'
133+ assert affinity_glob ['values' ][0 ] == 'myclaim'
134+
122135 if execute :
123136 print (op .execute ())
124137
138+ def test_pipeline_shared ():
139+ shared_directory = 'myclaim:/mnt/shared'
140+ task_write = operations .CustomTask ('download-file' , 'workflows-extract-download' ,
141+ url = 'https://raw.githubusercontent.com/openworm/org.geppetto/master/README.md' )
142+ task_script = tasks .BashTask ('print-file' , source = "ls -la" )
143+ op = operations .PipelineOperation ('test-custom-connected-op-' , [task_write , task_script ],
144+ shared_directory = shared_directory , shared_volume_size = 100 )
145+ wf = op .to_workflow ()
146+
147+ accounts_offset = 1 if is_accounts_present () else 0
148+ assert len (op .volumes ) == 1
149+ assert len (wf ['spec' ]['volumes' ]) == 2 + accounts_offset
150+ assert wf ['spec' ]['volumes' ][1 + accounts_offset ]['persistentVolumeClaim' ]['claimName' ] == 'myclaim'
151+ if accounts_offset == 1 :
152+ assert wf ['spec' ]['volumes' ][1 ]['secret' ]['secretName' ] == 'accounts'
153+ assert len (wf ['spec' ]['templates' ][1 ]['container' ]['volumeMounts' ]) == 2 + accounts_offset
154+ assert wf ['spec' ]['templates' ][1 ]['metadata' ]['labels' ]['usesvolume' ] == 'myclaim'
155+ assert wf ['spec' ]['templates' ][2 ]['metadata' ]['labels' ]['usesvolume' ] == 'myclaim'
156+ affinity_glob = \
157+ wf ['spec' ]['affinity' ]['podAffinity' ]['requiredDuringSchedulingIgnoredDuringExecution' ][0 ]['labelSelector' ][
158+ 'matchExpressions' ][0 ]
159+ assert affinity_glob ['key' ] == 'usesvolume'
160+ assert affinity_glob ['values' ][0 ] == 'myclaim'
161+
162+ if execute :
163+ print (op .execute ())
164+
125165def test_single_task_shared_rwx ():
126166 shared_directory = 'myclaim:/mnt/shared:rwx'
127167 task_write = operations .CustomTask ('download-file' , 'workflows-extract-download' ,
@@ -139,9 +179,39 @@ def test_single_task_shared_rwx():
139179 assert wf ['spec' ]['volumes' ][1 ]['secret' ]['secretName' ] == 'accounts'
140180 assert len (wf ['spec' ]['templates' ][0 ]['container' ]['volumeMounts' ]) == 2 + accounts_offset
141181
182+
183+
184+
142185 assert not 'affinity' in wf ['spec' ], "Pod affinity should not be added for rwx volumes"
143-
186+
144187def test_single_task_volume_notshared ():
188+
189+ task_write = operations .CustomTask ('download-file' , 'workflows-extract-download' , volume_mounts = ["a:b" ],
190+ url = 'https://raw.githubusercontent.com/openworm/org.geppetto/master/README.md' )
191+ op = operations .SingleTaskOperation ('test-custom-connected-op-' , task_write , shared_volume_size = 100 )
192+ wf = op .to_workflow ()
193+
194+ accounts_offset = 1 if is_accounts_present () else 0
195+ assert len (op .volumes ) == 0
196+ assert len (wf ['spec' ]['volumes' ]) == 2 + accounts_offset
197+ assert wf ['spec' ]['volumes' ][1 + accounts_offset ]['persistentVolumeClaim' ]['claimName' ] == 'a'
198+ if accounts_offset == 1 :
199+ assert wf ['spec' ]['volumes' ][1 ]['secret' ]['secretName' ] == 'accounts'
200+ assert len (wf ['spec' ]['templates' ][0 ]['container' ]['volumeMounts' ]) == 2 + accounts_offset
201+
202+
203+ assert 'affinity' not in wf ['spec' ]
204+
205+ affinity_tpl = \
206+ wf ['spec' ]['templates' ][0 ]['affinity' ]['podAffinity' ]['requiredDuringSchedulingIgnoredDuringExecution' ][0 ]['labelSelector' ][
207+ 'matchExpressions' ][0 ]
208+ assert affinity_tpl ['key' ] == 'usesvolume'
209+ assert affinity_tpl ['values' ][0 ] == 'a'
210+ assert wf ['spec' ]['templates' ][0 ]['metadata' ]['labels' ]['usesvolume' ] == 'a'
211+ if execute :
212+ print (op .execute ())
213+
214+ def test_single_task_volumes_notshared ():
145215 shared_directory = 'myclaim:/mnt/shared'
146216 task_write = operations .CustomTask ('download-file' , 'workflows-extract-download' , volume_mounts = ["a:b" ],
147217 url = 'https://raw.githubusercontent.com/openworm/org.geppetto/master/README.md' )
@@ -167,7 +237,7 @@ def test_single_task_volume_notshared():
167237 'matchExpressions' ][0 ]
168238 assert affinity_tpl ['key' ] == 'usesvolume'
169239 assert affinity_tpl ['values' ][0 ] == 'a'
170-
240+ assert wf [ 'spec' ][ 'templates' ][ 0 ][ 'metadata' ][ 'labels' ][ 'usesvolume' ]
171241 if execute :
172242 print (op .execute ())
173243
@@ -202,6 +272,7 @@ def test_single_task_shared_multiple():
202272 print (op .execute ())
203273
204274
275+
205276def test_single_task_shared_script ():
206277 shared_directory = 'myclaim:/mnt/shared'
207278 task_write = tasks .BashTask ('download-file' , source = "ls -la" )
0 commit comments