|
1 | 1 | package anonymization
|
2 | 2 |
|
3 | 3 | import (
|
| 4 | + "context" |
4 | 5 | "fmt"
|
5 | 6 | "net"
|
6 | 7 | "testing"
|
7 | 8 |
|
| 9 | + configv1 "github.com/openshift/api/config/v1" |
| 10 | + networkv1 "github.com/openshift/api/network/v1" |
| 11 | + configfake "github.com/openshift/client-go/config/clientset/versioned/fake" |
| 12 | + networkfake "github.com/openshift/client-go/network/clientset/versioned/fake" |
| 13 | + "github.com/stretchr/testify/assert" |
8 | 14 | corev1 "k8s.io/api/core/v1"
|
| 15 | + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" |
9 | 16 | "k8s.io/apimachinery/pkg/runtime"
|
10 |
| - |
11 |
| - "github.com/stretchr/testify/assert" |
12 | 17 | kubefake "k8s.io/client-go/kubernetes/fake"
|
13 | 18 | corefake "k8s.io/client-go/kubernetes/typed/core/v1/fake"
|
14 | 19 | clienttesting "k8s.io/client-go/testing"
|
@@ -241,3 +246,94 @@ func Test_Anonymizer_StoreTranslationTable(t *testing.T) {
|
241 | 246 | assert.Equal(t, secret.StringData[fmt.Sprintf("192.168.0.%v", 255-i)], fmt.Sprintf("192.168.0.%v", i+1))
|
242 | 247 | }
|
243 | 248 | }
|
| 249 | + |
| 250 | +func TestAnonymizer_NewAnonymizerFromConfigClient(t *testing.T) { |
| 251 | + const testClusterBaseDomain = "example.com" |
| 252 | + localhostCIDR := "127.0.0.0/8" |
| 253 | + _, localhostNet, err := net.ParseCIDR(localhostCIDR) |
| 254 | + assert.NoError(t, err) |
| 255 | + cidr1 := "55.44.0.0/16" |
| 256 | + _, net1, err := net.ParseCIDR(cidr1) |
| 257 | + assert.NoError(t, err) |
| 258 | + cidr2 := "192.168.0.0/16" |
| 259 | + _, net2, err := net.ParseCIDR(cidr2) |
| 260 | + assert.NoError(t, err) |
| 261 | + egressCIDR := "10.0.0.0/8" |
| 262 | + _, egressNet, err := net.ParseCIDR(egressCIDR) |
| 263 | + assert.NoError(t, err) |
| 264 | + testNetworks := []subnetInformation{ |
| 265 | + { |
| 266 | + network: *egressNet, |
| 267 | + lastIP: net.IPv4(10, 0, 0, 0), |
| 268 | + }, |
| 269 | + { |
| 270 | + network: *net1, |
| 271 | + lastIP: net.IPv4(55, 44, 0, 0), |
| 272 | + }, |
| 273 | + { |
| 274 | + network: *net2, |
| 275 | + lastIP: net.IPv4(192, 168, 0, 0), |
| 276 | + }, |
| 277 | + { |
| 278 | + network: *localhostNet, |
| 279 | + lastIP: net.IPv4(127, 0, 0, 0), |
| 280 | + }, |
| 281 | + } |
| 282 | + |
| 283 | + kubeClient := kubefake.NewSimpleClientset() |
| 284 | + coreClient := kubeClient.CoreV1() |
| 285 | + networkClient := networkfake.NewSimpleClientset().NetworkV1() |
| 286 | + configClient := configfake.NewSimpleClientset().ConfigV1() |
| 287 | + ctx := context.TODO() |
| 288 | + |
| 289 | + // create fake resources |
| 290 | + _, err = configClient.DNSes().Create(ctx, &configv1.DNS{ |
| 291 | + ObjectMeta: metav1.ObjectMeta{Name: "cluster"}, |
| 292 | + Spec: configv1.DNSSpec{BaseDomain: testClusterBaseDomain}, |
| 293 | + }, metav1.CreateOptions{}) |
| 294 | + assert.NoError(t, err) |
| 295 | + |
| 296 | + _, err = configClient.Networks().Create(context.TODO(), &configv1.Network{ |
| 297 | + ObjectMeta: metav1.ObjectMeta{Name: "cluster"}, |
| 298 | + Spec: configv1.NetworkSpec{ |
| 299 | + ClusterNetwork: []configv1.ClusterNetworkEntry{{CIDR: cidr1}}, |
| 300 | + ServiceNetwork: []string{cidr2}, |
| 301 | + ExternalIP: &configv1.ExternalIPConfig{Policy: &configv1.ExternalIPPolicy{}}, |
| 302 | + }, |
| 303 | + }, metav1.CreateOptions{}) |
| 304 | + assert.NoError(t, err) |
| 305 | + |
| 306 | + _, err = coreClient.ConfigMaps("kube-system").Create(ctx, &corev1.ConfigMap{ |
| 307 | + ObjectMeta: metav1.ObjectMeta{Name: "cluster-config-v1"}, |
| 308 | + }, metav1.CreateOptions{}) |
| 309 | + assert.NoError(t, err) |
| 310 | + |
| 311 | + _, err = networkClient.HostSubnets().Create(ctx, &networkv1.HostSubnet{ |
| 312 | + EgressCIDRs: []networkv1.HostSubnetEgressCIDR{networkv1.HostSubnetEgressCIDR(egressCIDR)}, |
| 313 | + }, metav1.CreateOptions{}) |
| 314 | + assert.NoError(t, err) |
| 315 | + |
| 316 | + // test that everything was initialized correctly |
| 317 | + |
| 318 | + anonymizer, err := NewAnonymizerFromConfigClient( |
| 319 | + context.TODO(), |
| 320 | + kubeClient, |
| 321 | + configClient, |
| 322 | + networkClient, |
| 323 | + ) |
| 324 | + assert.NoError(t, err) |
| 325 | + assert.NotNil(t, anonymizer) |
| 326 | + |
| 327 | + assert.Equal(t, testClusterBaseDomain, anonymizer.clusterBaseDomain) |
| 328 | + assert.Empty(t, anonymizer.translationTable) |
| 329 | + assert.NotNil(t, anonymizer.ipNetworkRegex) |
| 330 | + assert.NotNil(t, anonymizer.secretsClient) |
| 331 | + |
| 332 | + assert.Equal(t, len(testNetworks), len(anonymizer.networks)) |
| 333 | + // the networks are already sorted in anonymizer |
| 334 | + for i, subnetInfo := range anonymizer.networks { |
| 335 | + expectedSubnetInfo := testNetworks[i] |
| 336 | + assert.Equal(t, expectedSubnetInfo.network.Network(), subnetInfo.network.Network()) |
| 337 | + assert.Equal(t, expectedSubnetInfo.lastIP.String(), subnetInfo.lastIP.String()) |
| 338 | + } |
| 339 | +} |
0 commit comments