github.com/sleungcy-sap/cli@v7.1.0+incompatible/resources/quota_resource_test.go (about)

     1  package resources
     2  
     3  import (
     4  	"encoding/json"
     5  
     6  	"code.cloudfoundry.org/cli/types"
     7  	. "github.com/onsi/ginkgo"
     8  	. "github.com/onsi/ginkgo/extensions/table"
     9  	. "github.com/onsi/gomega"
    10  )
    11  
    12  var _ = Describe("quota limits", func() {
    13  	Describe("AppLimit", func() {
    14  		DescribeTable("MarshalJSON",
    15  			func(appLimit AppLimit, expectedBytes []byte) {
    16  				bytes, err := json.Marshal(appLimit)
    17  				Expect(err).ToNot(HaveOccurred())
    18  				Expect(bytes).To(Equal(expectedBytes))
    19  			},
    20  			Entry("total memory", AppLimit{TotalMemory: &types.NullInt{IsSet: true, Value: 1}}, []byte(`{"total_memory_in_mb":1}`)),
    21  			Entry("total memory", AppLimit{TotalMemory: nil}, []byte(`{}`)),
    22  			Entry("total memory", AppLimit{TotalMemory: &types.NullInt{IsSet: false}}, []byte(`{"total_memory_in_mb":null}`)),
    23  			Entry("instance memory", AppLimit{InstanceMemory: &types.NullInt{IsSet: true, Value: 1}}, []byte(`{"per_process_memory_in_mb":1}`)),
    24  			Entry("instance memory", AppLimit{InstanceMemory: nil}, []byte(`{}`)),
    25  			Entry("instance memory", AppLimit{InstanceMemory: &types.NullInt{IsSet: false}}, []byte(`{"per_process_memory_in_mb":null}`)),
    26  			Entry("total app instances", AppLimit{TotalAppInstances: &types.NullInt{IsSet: true, Value: 1}}, []byte(`{"total_instances":1}`)),
    27  			Entry("total app instances", AppLimit{TotalAppInstances: nil}, []byte(`{}`)),
    28  			Entry("total app instances", AppLimit{TotalAppInstances: &types.NullInt{IsSet: false}}, []byte(`{"total_instances":null}`)),
    29  		)
    30  
    31  		DescribeTable("UnmarshalJSON",
    32  			func(givenBytes []byte, expectedStruct AppLimit) {
    33  				var actualStruct AppLimit
    34  				err := json.Unmarshal(givenBytes, &actualStruct)
    35  				Expect(err).ToNot(HaveOccurred())
    36  				Expect(actualStruct).To(Equal(expectedStruct))
    37  			},
    38  			Entry(
    39  				"no null values",
    40  				[]byte(`{"total_memory_in_mb":1,"per_process_memory_in_mb":2,"total_instances":3}`),
    41  				AppLimit{
    42  					TotalMemory:       &types.NullInt{IsSet: true, Value: 1},
    43  					InstanceMemory:    &types.NullInt{IsSet: true, Value: 2},
    44  					TotalAppInstances: &types.NullInt{IsSet: true, Value: 3},
    45  				}),
    46  			Entry(
    47  				"total memory is null",
    48  				[]byte(`{"total_memory_in_mb":null,"per_process_memory_in_mb":2,"total_instances":3}`),
    49  				AppLimit{
    50  					TotalMemory:       &types.NullInt{IsSet: false, Value: 0},
    51  					InstanceMemory:    &types.NullInt{IsSet: true, Value: 2},
    52  					TotalAppInstances: &types.NullInt{IsSet: true, Value: 3},
    53  				}),
    54  			Entry(
    55  				"per process memory is null",
    56  				[]byte(`{"total_memory_in_mb":1,"per_process_memory_in_mb":null,"total_instances":3}`),
    57  				AppLimit{
    58  					TotalMemory:       &types.NullInt{IsSet: true, Value: 1},
    59  					InstanceMemory:    &types.NullInt{IsSet: false, Value: 0},
    60  					TotalAppInstances: &types.NullInt{IsSet: true, Value: 3},
    61  				}),
    62  			Entry(
    63  				"total instances is null",
    64  				[]byte(`{"total_memory_in_mb":1,"per_process_memory_in_mb":2,"total_instances":null}`),
    65  				AppLimit{
    66  					TotalMemory:       &types.NullInt{IsSet: true, Value: 1},
    67  					InstanceMemory:    &types.NullInt{IsSet: true, Value: 2},
    68  					TotalAppInstances: &types.NullInt{IsSet: false, Value: 0},
    69  				}),
    70  		)
    71  	})
    72  
    73  	Describe("ServiceLimit", func() {
    74  		var (
    75  			trueValue  = true
    76  			falseValue = false
    77  		)
    78  
    79  		DescribeTable("MarshalJSON",
    80  			func(serviceLimit ServiceLimit, expectedBytes []byte) {
    81  				bytes, err := json.Marshal(serviceLimit)
    82  				Expect(err).ToNot(HaveOccurred())
    83  				Expect(bytes).To(Equal(expectedBytes))
    84  			},
    85  			Entry("total service instances", ServiceLimit{TotalServiceInstances: &types.NullInt{IsSet: true, Value: 1}}, []byte(`{"total_service_instances":1}`)),
    86  			Entry("total service instances", ServiceLimit{TotalServiceInstances: nil}, []byte(`{}`)),
    87  			Entry("total service instances", ServiceLimit{TotalServiceInstances: &types.NullInt{IsSet: false}}, []byte(`{"total_service_instances":null}`)),
    88  			Entry("paid service plans", ServiceLimit{PaidServicePlans: &trueValue}, []byte(`{"paid_services_allowed":true}`)),
    89  			Entry("paid service plans", ServiceLimit{PaidServicePlans: nil}, []byte(`{}`)),
    90  			Entry("paid service plans", ServiceLimit{PaidServicePlans: &falseValue}, []byte(`{"paid_services_allowed":false}`)),
    91  		)
    92  
    93  		DescribeTable("UnmarshalJSON",
    94  			func(givenBytes []byte, expectedStruct ServiceLimit) {
    95  				var actualStruct ServiceLimit
    96  				err := json.Unmarshal(givenBytes, &actualStruct)
    97  				Expect(err).ToNot(HaveOccurred())
    98  				Expect(actualStruct).To(Equal(expectedStruct))
    99  			},
   100  			Entry(
   101  				"no null values",
   102  				[]byte(`{"total_service_instances":1,"paid_services_allowed":true}`),
   103  				ServiceLimit{
   104  					TotalServiceInstances: &types.NullInt{IsSet: true, Value: 1},
   105  					PaidServicePlans:      &trueValue,
   106  				}),
   107  			Entry(
   108  				"total service instances is null and paid services allowed is false",
   109  				[]byte(`{"total_service_instances":null,"paid_services_allowed":false}`),
   110  				ServiceLimit{
   111  					TotalServiceInstances: &types.NullInt{IsSet: false, Value: 0},
   112  					PaidServicePlans:      &falseValue,
   113  				}),
   114  		)
   115  	})
   116  
   117  	Describe("RouteLimit", func() {
   118  		DescribeTable("MarshalJSON",
   119  			func(routeLimit RouteLimit, expectedBytes []byte) {
   120  				bytes, err := json.Marshal(routeLimit)
   121  				Expect(err).ToNot(HaveOccurred())
   122  				Expect(bytes).To(Equal(expectedBytes))
   123  			},
   124  			Entry("total routes", RouteLimit{TotalRoutes: &types.NullInt{IsSet: true, Value: 1}}, []byte(`{"total_routes":1}`)),
   125  			Entry("total routes", RouteLimit{TotalRoutes: nil}, []byte(`{}`)),
   126  			Entry("total routes", RouteLimit{TotalRoutes: &types.NullInt{IsSet: false}}, []byte(`{"total_routes":null}`)),
   127  			Entry("total reserved ports", RouteLimit{TotalReservedPorts: &types.NullInt{IsSet: true, Value: 1}}, []byte(`{"total_reserved_ports":1}`)),
   128  			Entry("total reserved ports", RouteLimit{TotalReservedPorts: nil}, []byte(`{}`)),
   129  			Entry("total reserved ports", RouteLimit{TotalReservedPorts: &types.NullInt{IsSet: false}}, []byte(`{"total_reserved_ports":null}`)),
   130  		)
   131  
   132  		DescribeTable("UnmarshalJSON",
   133  			func(givenBytes []byte, expectedStruct RouteLimit) {
   134  				var actualStruct RouteLimit
   135  				err := json.Unmarshal(givenBytes, &actualStruct)
   136  				Expect(err).ToNot(HaveOccurred())
   137  				Expect(actualStruct).To(Equal(expectedStruct))
   138  			},
   139  			Entry(
   140  				"no null values",
   141  				[]byte(`{"total_routes":1,"total_reserved_ports":2}`),
   142  				RouteLimit{
   143  					TotalRoutes:        &types.NullInt{IsSet: true, Value: 1},
   144  					TotalReservedPorts: &types.NullInt{IsSet: true, Value: 2},
   145  				}),
   146  			Entry(
   147  				"total routes is null",
   148  				[]byte(`{"total_routes":null,"total_reserved_ports":3}`),
   149  				RouteLimit{
   150  					TotalRoutes:        &types.NullInt{IsSet: false, Value: 0},
   151  					TotalReservedPorts: &types.NullInt{IsSet: true, Value: 3},
   152  				}),
   153  			Entry(
   154  				"total reserved ports is null",
   155  				[]byte(`{"total_routes":4,"total_reserved_ports":null}`),
   156  				RouteLimit{
   157  					TotalRoutes:        &types.NullInt{IsSet: true, Value: 4},
   158  					TotalReservedPorts: &types.NullInt{IsSet: false, Value: 0},
   159  				}),
   160  		)
   161  
   162  	})
   163  })