github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/swarmkit/manager/orchestrator/service_test.go (about)

     1  package orchestrator
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/docker/swarmkit/api"
     7  	"github.com/stretchr/testify/assert"
     8  )
     9  
    10  // TestIsReplicatedJob tests that IsReplicatedJob only returns true when the
    11  // service mod is ReplicatedJob
    12  func TestIsReplicatedJob(t *testing.T) {
    13  	// first, create a spec with no mode, that we can reuse for each subtest.
    14  	service := &api.Service{
    15  		ID:   "someService",
    16  		Spec: api.ServiceSpec{},
    17  	}
    18  	// this might seem like a good use-case for a table-based test, but the
    19  	// various service modes do not share a common public interface, and so
    20  	// cannot be easily assigned to the same type
    21  
    22  	service.Spec.Mode = &api.ServiceSpec_ReplicatedJob{}
    23  	assert.Equal(t, IsReplicatedJob(service), true)
    24  
    25  	service.Spec.Mode = &api.ServiceSpec_GlobalJob{}
    26  	assert.Equal(t, IsReplicatedJob(service), false)
    27  
    28  	service.Spec.Mode = &api.ServiceSpec_Replicated{}
    29  	assert.Equal(t, IsReplicatedJob(service), false)
    30  
    31  	service.Spec.Mode = &api.ServiceSpec_Global{}
    32  	assert.Equal(t, IsReplicatedJob(service), false)
    33  }
    34  
    35  // TestIsGlobalJob tests that IsGlobalJob only returns true when the
    36  // service mod is GlobalJob. This test is pretty much identical to
    37  // TestIsReplicatedJob. There is probably a clever DRY solution to encompass
    38  // both functions in one test, but these are really braindead simple tests so
    39  // it's just easier to cut and paste.
    40  func TestIsGlobalJob(t *testing.T) {
    41  	// first, create a spec with no mode, that we can reuse for each subtest.
    42  	service := &api.Service{
    43  		ID:   "someService",
    44  		Spec: api.ServiceSpec{},
    45  	}
    46  	// this might seem like a good use-case for a table-based test, but the
    47  	// various service modes do not share a common public interface, and so
    48  	// cannot be easily assigned to the same type
    49  
    50  	service.Spec.Mode = &api.ServiceSpec_ReplicatedJob{}
    51  	assert.Equal(t, IsGlobalJob(service), false)
    52  
    53  	service.Spec.Mode = &api.ServiceSpec_GlobalJob{}
    54  	assert.Equal(t, IsGlobalJob(service), true)
    55  
    56  	service.Spec.Mode = &api.ServiceSpec_Replicated{}
    57  	assert.Equal(t, IsGlobalJob(service), false)
    58  
    59  	service.Spec.Mode = &api.ServiceSpec_Global{}
    60  	assert.Equal(t, IsGlobalJob(service), false)
    61  }