github.com/gravitational/teleport/api@v0.0.0-20240507183017-3110591cbafc/types/license_test.go (about) 1 /* 2 Copyright 2022 Gravitational, Inc. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package types 18 19 import ( 20 "reflect" 21 "runtime" 22 "testing" 23 24 "github.com/stretchr/testify/require" 25 ) 26 27 func TestLicenseSettersAndGetters(t *testing.T) { 28 // All getters inspected in this test. 29 allFields := []func(License) Bool{ 30 License.GetReportsUsage, 31 License.GetSalesCenterReporting, 32 License.GetCloud, 33 License.GetSupportsKubernetes, 34 License.GetSupportsApplicationAccess, 35 License.GetSupportsDatabaseAccess, 36 License.GetSupportsDesktopAccess, 37 License.GetSupportsModeratedSessions, 38 License.GetSupportsMachineID, 39 License.GetSupportsResourceAccessRequests, 40 License.GetSupportsFeatureHiding, 41 License.GetTrial, 42 License.GetUsageBasedBilling, 43 License.GetSupportsIdentityGovernanceSecurity, 44 } 45 46 // unsetFields returns a list of license fields getters minus 47 // the one passed as an argument. 48 unsetFields := func(getter func(License) Bool) []func(License) Bool { 49 var unsetFields []func(License) Bool 50 for _, fieldGetter := range allFields { 51 if fnName(fieldGetter) != fnName(getter) { 52 unsetFields = append(unsetFields, fieldGetter) 53 } 54 } 55 return unsetFields 56 } 57 58 tt := []struct { 59 name string 60 setter func(License, Bool) 61 getter func(License) Bool 62 unsetFields [](func(License) Bool) 63 }{ 64 { 65 name: "Set ReportsUsage", 66 setter: License.SetReportsUsage, 67 getter: License.GetReportsUsage, 68 unsetFields: unsetFields(License.GetReportsUsage), 69 }, 70 { 71 name: "Set SalesCenterReporting", 72 setter: License.SetSalesCenterReporting, 73 getter: License.GetSalesCenterReporting, 74 unsetFields: unsetFields(License.GetSalesCenterReporting), 75 }, 76 { 77 name: "Set Cloud", 78 setter: License.SetCloud, 79 getter: License.GetCloud, 80 unsetFields: unsetFields(License.GetCloud), 81 }, 82 { 83 name: "Set Kubernetes Support", 84 setter: License.SetSupportsKubernetes, 85 getter: License.GetSupportsKubernetes, 86 unsetFields: unsetFields(License.GetSupportsKubernetes), 87 }, 88 { 89 name: "Set Application Access Support", 90 setter: License.SetSupportsApplicationAccess, 91 getter: License.GetSupportsApplicationAccess, 92 unsetFields: unsetFields(License.GetSupportsApplicationAccess), 93 }, 94 { 95 name: "Set Database Access Support", 96 setter: License.SetSupportsDatabaseAccess, 97 getter: License.GetSupportsDatabaseAccess, 98 unsetFields: unsetFields(License.GetSupportsDatabaseAccess), 99 }, 100 { 101 name: "Set Desktop Access Support", 102 setter: License.SetSupportsDesktopAccess, 103 getter: License.GetSupportsDesktopAccess, 104 unsetFields: unsetFields(License.GetSupportsDesktopAccess), 105 }, 106 { 107 name: "Set Moderated Sessions Support", 108 setter: License.SetSupportsModeratedSessions, 109 getter: License.GetSupportsModeratedSessions, 110 unsetFields: unsetFields(License.GetSupportsModeratedSessions), 111 }, 112 { 113 name: "Set Machine ID Support", 114 setter: License.SetSupportsMachineID, 115 getter: License.GetSupportsMachineID, 116 unsetFields: unsetFields(License.GetSupportsMachineID), 117 }, 118 { 119 name: "Set Resource Access Request Support", 120 setter: License.SetSupportsResourceAccessRequests, 121 getter: License.GetSupportsResourceAccessRequests, 122 unsetFields: unsetFields(License.GetSupportsResourceAccessRequests), 123 }, 124 { 125 name: "Set Feature Hiding Support", 126 setter: License.SetSupportsFeatureHiding, 127 getter: License.GetSupportsFeatureHiding, 128 unsetFields: unsetFields(License.GetSupportsFeatureHiding), 129 }, 130 { 131 name: "Set Trial Support", 132 setter: License.SetTrial, 133 getter: License.GetTrial, 134 unsetFields: unsetFields(License.GetTrial), 135 }, 136 { 137 name: "Set IGS Support", 138 setter: License.SetSupportsIdentityGovernanceSecurity, 139 getter: License.GetSupportsIdentityGovernanceSecurity, 140 unsetFields: unsetFields(License.GetSupportsIdentityGovernanceSecurity), 141 }, 142 { 143 name: "Set Usage Based Billing", 144 setter: License.SetUsageBasedBilling, 145 getter: License.GetUsageBasedBilling, 146 unsetFields: unsetFields(License.GetUsageBasedBilling), 147 }, 148 } 149 150 for _, tc := range tt { 151 t.Run(tc.name, func(t *testing.T) { 152 license := &LicenseV3{ 153 Spec: LicenseSpecV3{ 154 SupportsApplicationAccess: NewBoolP(false), 155 }, 156 } 157 tc.setter(license, true) 158 require.True(t, bool(tc.getter(license))) 159 for _, unset := range tc.unsetFields { 160 require.False(t, bool(unset(license))) 161 } 162 }) 163 } 164 165 // Manually test Application Access. 166 // If unset application access is set to true by default. 167 license := &LicenseV3{} 168 require.True(t, bool(license.GetSupportsApplicationAccess())) 169 require.False(t, bool(license.GetReportsUsage())) 170 require.False(t, bool(license.GetSalesCenterReporting())) 171 require.False(t, bool(license.GetCloud())) 172 require.False(t, bool(license.GetSupportsKubernetes())) 173 require.False(t, bool(license.GetSupportsDatabaseAccess())) 174 require.False(t, bool(license.GetSupportsDesktopAccess())) 175 require.False(t, bool(license.GetSupportsModeratedSessions())) 176 require.False(t, bool(license.GetSupportsMachineID())) 177 require.False(t, bool(license.GetSupportsResourceAccessRequests())) 178 require.False(t, bool(license.GetSupportsFeatureHiding())) 179 require.False(t, bool(license.GetTrial())) 180 require.False(t, bool(license.GetSupportsIdentityGovernanceSecurity())) 181 require.False(t, bool(license.GetUsageBasedBilling())) 182 } 183 184 func fnName(i interface{}) string { 185 return runtime.FuncForPC(reflect.ValueOf(i).Pointer()).Name() 186 }