@@ -19,6 +19,9 @@ module VCAP::CloudController
1919 metadata : {
2020 labels : { potato : 'yam' } ,
2121 annotations : { style : 'mashed' }
22+ } ,
23+ options : {
24+ lb_algo : 'round-robin'
2225 }
2326 }
2427 end
@@ -354,6 +357,111 @@ module VCAP::CloudController
354357 end
355358 end
356359 end
360+
361+ context 'options' do
362+ context 'when not provided' do
363+ let ( :params ) do
364+ {
365+ host : 'some-host' ,
366+ relationships : {
367+ space : { data : { guid : 'space-guid' } } ,
368+ domain : { data : { guid : 'domain-guid' } }
369+ }
370+ }
371+ end
372+
373+ it 'is valid' do
374+ expect ( subject ) . to be_valid
375+ end
376+ end
377+
378+ context 'when empty' do
379+ let ( :params ) do
380+ {
381+ host : 'some-host' ,
382+ relationships : {
383+ space : { data : { guid : 'space-guid' } } ,
384+ domain : { data : { guid : 'domain-guid' } }
385+ } ,
386+ options : { }
387+ }
388+ end
389+
390+ it 'is valid' do
391+ expect ( subject ) . to be_valid
392+ end
393+ end
394+
395+ context 'when options has invalid key' do
396+ let ( :params ) do
397+ {
398+ host : 'some-host' ,
399+ relationships : {
400+ space : { data : { guid : 'space-guid' } } ,
401+ domain : { data : { guid : 'domain-guid' } }
402+ } ,
403+ options : { foobar : 'baz' }
404+ }
405+ end
406+
407+ it 'is not valid' do
408+ expect ( subject ) . not_to be_valid
409+ expect ( subject . errors [ :options ] ) . to include ( "Unknown field(s): 'foobar'" )
410+ end
411+ end
412+
413+ context 'when lb_algo has value round-robin' do
414+ let ( :params ) do
415+ {
416+ host : 'some-host' ,
417+ relationships : {
418+ space : { data : { guid : 'space-guid' } } ,
419+ domain : { data : { guid : 'domain-guid' } }
420+ } ,
421+ options : { lb_algo : 'round-robin' }
422+ }
423+ end
424+
425+ it 'is valid' do
426+ expect ( subject ) . to be_valid
427+ end
428+
429+ context 'when lb_algo has value least-connections' do
430+ let ( :params ) do
431+ {
432+ host : 'some-host' ,
433+ relationships : {
434+ space : { data : { guid : 'space-guid' } } ,
435+ domain : { data : { guid : 'domain-guid' } }
436+ } ,
437+ options : { lb_algo : 'least-connections' }
438+ }
439+ end
440+
441+ it 'is valid' do
442+ expect ( subject ) . to be_valid
443+ end
444+ end
445+
446+ context 'when lb_algo has invalid value' do
447+ let ( :params ) do
448+ {
449+ host : 'some-host' ,
450+ relationships : {
451+ space : { data : { guid : 'space-guid' } } ,
452+ domain : { data : { guid : 'domain-guid' } }
453+ } ,
454+ options : { lb_algo : 'random' }
455+ }
456+ end
457+
458+ it 'is not valid' do
459+ expect ( subject ) . not_to be_valid
460+ expect ( subject . errors [ :options ] ) . to include ( "Lb algo must be 'least-connections' or 'round-robin'" )
461+ end
462+ end
463+ end
464+ end
357465 end
358466
359467 describe 'accessor methods' do
0 commit comments