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  }