@@ -2,6 +2,7 @@ package agent
2
2
3
3
import (
4
4
"bytes"
5
+ "compress/gzip"
5
6
"context"
6
7
"fmt"
7
8
"io"
@@ -373,6 +374,19 @@ func Test_ValidateAndCombineConfig(t *testing.T) {
373
374
assert.IsType(t, &client.OAuthClient{}, cl)
374
375
})
375
376
377
+ t.Run("jetstack-secure-oauth-auth: can't use --disable-compression", func(t *testing.T) {
378
+ path := withFile(t, `{"user_id":"
[email protected] ","user_secret":"foo","client_id": "k3TrDbfLhCgnpAbOiiT2kIE1AbovKzjo","client_secret": "f39w_3KT9Vp0VhzcPzvh-uVbudzqCFmHER3Huj0dvHgJwVrjxsoOQPIw_1SDiCfa","auth_server_domain":"auth.jetstack.io"}`)
379
+ _, _, err := ValidateAndCombineConfig(discardLogs(),
380
+ withConfig(testutil.Undent(`
381
+ server: https://api.venafi.eu
382
+ period: 1h
383
+ organization_id: foo
384
+ cluster_id: bar
385
+ `)),
386
+ withCmdLineFlags("--disable-compression", "--credentials-file", path))
387
+ require.EqualError(t, err, "1 error occurred:\n\t* --disable-compression can only be used with the Venafi Cloud Key Pair Service Account and Venafi Cloud VenafiConnection modes\n\n")
388
+ })
389
+
376
390
t.Run("jetstack-secure-oauth-auth: --credential-file used but file is missing", func(t *testing.T) {
377
391
t.Setenv("POD_NAMESPACE", "venafi")
378
392
got, _, err := ValidateAndCombineConfig(discardLogs(),
@@ -632,6 +646,81 @@ func Test_ValidateAndCombineConfig_VenafiCloudKeyPair(t *testing.T) {
632
646
err = cl.PostDataReadingsWithOptions(nil, client.Options{ClusterName: "test cluster name"})
633
647
require.NoError(t, err)
634
648
})
649
+
650
+ t.Run("the request body is compressed", func(t *testing.T) {
651
+ srv, cert, setVenafiCloudAssert := testutil.FakeVenafiCloud(t)
652
+ setVenafiCloudAssert(func(t testing.TB, gotReq *http.Request) {
653
+ if gotReq.URL.Path == "/v1/oauth/token/serviceaccount" {
654
+ return
655
+ }
656
+ assert.Equal(t, "/v1/tlspk/upload/clusterdata/no", gotReq.URL.Path)
657
+
658
+ // Let's check that the body is compressed as expected.
659
+ assert.Equal(t, "gzip", gotReq.Header.Get("Content-Encoding"))
660
+ uncompressR, err := gzip.NewReader(gotReq.Body)
661
+ require.NoError(t, err, "body might not be compressed")
662
+ defer uncompressR.Close()
663
+ uncompressed, err := io.ReadAll(uncompressR)
664
+ require.NoError(t, err)
665
+ assert.Contains(t, string(uncompressed), `{"agent_metadata":{"version":"development","cluster_id":"test cluster name"}`)
666
+ })
667
+ privKeyPath := withFile(t, fakePrivKeyPEM)
668
+ got, cl, err := ValidateAndCombineConfig(discardLogs(),
669
+ withConfig(testutil.Undent(`
670
+ server: `+srv.URL+`
671
+ period: 1h
672
+ cluster_id: "test cluster name"
673
+ venafi-cloud:
674
+ uploader_id: no
675
+ upload_path: /v1/tlspk/upload/clusterdata
676
+ `)),
677
+ withCmdLineFlags("--client-id", "5bc7d07c-45da-11ef-a878-523f1e1d7de1", "--private-key-path", privKeyPath),
678
+ )
679
+ testutil.TrustCA(t, cl, cert)
680
+ assert.Equal(t, VenafiCloudKeypair, got.AuthMode)
681
+ require.NoError(t, err)
682
+
683
+ err = cl.PostDataReadingsWithOptions(nil, client.Options{ClusterName: "test cluster name"})
684
+ require.NoError(t, err)
685
+ })
686
+
687
+ t.Run("--disable-compression works", func(t *testing.T) {
688
+ srv, cert, setVenafiCloudAssert := testutil.FakeVenafiCloud(t)
689
+ setVenafiCloudAssert(func(t testing.TB, gotReq *http.Request) {
690
+ // Only care about /v1/tlspk/upload/clusterdata/:uploader_id?name=
691
+ if gotReq.URL.Path == "/v1/oauth/token/serviceaccount" {
692
+ return
693
+ }
694
+
695
+ assert.Equal(t, "/v1/tlspk/upload/clusterdata/no", gotReq.URL.Path)
696
+
697
+ // Let's check that the body isn't compressed.
698
+ assert.Equal(t, "", gotReq.Header.Get("Content-Encoding"))
699
+ b := new(bytes.Buffer)
700
+ _, err := b.ReadFrom(gotReq.Body)
701
+ require.NoError(t, err)
702
+ assert.Contains(t, b.String(), `{"agent_metadata":{"version":"development","cluster_id":"test cluster name"}`)
703
+ })
704
+
705
+ privKeyPath := withFile(t, fakePrivKeyPEM)
706
+ got, cl, err := ValidateAndCombineConfig(discardLogs(),
707
+ withConfig(testutil.Undent(`
708
+ server: `+srv.URL+`
709
+ period: 1h
710
+ cluster_id: "test cluster name"
711
+ venafi-cloud:
712
+ uploader_id: no
713
+ upload_path: /v1/tlspk/upload/clusterdata
714
+ `)),
715
+ withCmdLineFlags("--disable-compression", "--client-id", "5bc7d07c-45da-11ef-a878-523f1e1d7de1", "--private-key-path", privKeyPath),
716
+ )
717
+ testutil.TrustCA(t, cl, cert)
718
+ assert.Equal(t, VenafiCloudKeypair, got.AuthMode)
719
+ require.NoError(t, err)
720
+
721
+ err = cl.PostDataReadingsWithOptions(nil, client.Options{ClusterName: "test cluster name"})
722
+ require.NoError(t, err)
723
+ })
635
724
}
636
725
637
726
// Slower test cases due to envtest. That's why they are separated from the
@@ -711,8 +800,12 @@ func Test_ValidateAndCombineConfig_VenafiConnection(t *testing.T) {
711
800
})
712
801
713
802
cfg, cl, err := ValidateAndCombineConfig(discardLogs(),
714
- Config{Server: "http://this-url-should-be-ignored", Period: 1 * time.Hour, ClusterID: "test cluster name"},
715
- AgentCmdFlags{VenConnName: "venafi-components", InstallNS: "venafi"})
803
+ withConfig(testutil.Undent(`
804
+ server: http://this-url-should-be-ignored
805
+ period: 1h
806
+ cluster_id: test cluster name
807
+ `)),
808
+ withCmdLineFlags("--venafi-connection", "venafi-components", "--install-namespace", "venafi"))
716
809
require.NoError(t, err)
717
810
718
811
testutil.VenConnStartWatching(t, cl)
@@ -724,6 +817,53 @@ func Test_ValidateAndCombineConfig_VenafiConnection(t *testing.T) {
724
817
err = cl.PostDataReadingsWithOptions(nil, client.Options{ClusterName: cfg.ClusterID})
725
818
require.NoError(t, err)
726
819
})
820
+
821
+ t.Run("the request is compressed by default", func(t *testing.T) {
822
+ setVenafiCloudAssert(func(t testing.TB, gotReq *http.Request) {
823
+ // Let's check that the body is compressed as expected.
824
+ assert.Equal(t, "gzip", gotReq.Header.Get("Content-Encoding"))
825
+ uncompressR, err := gzip.NewReader(gotReq.Body)
826
+ require.NoError(t, err, "body might not be compressed")
827
+ defer uncompressR.Close()
828
+ uncompressed, err := io.ReadAll(uncompressR)
829
+ require.NoError(t, err)
830
+ assert.Contains(t, string(uncompressed), `{"agent_metadata":{"version":"development","cluster_id":"test cluster name"}`)
831
+ })
832
+ cfg, cl, err := ValidateAndCombineConfig(discardLogs(),
833
+ withConfig(testutil.Undent(`
834
+ period: 1h
835
+ cluster_id: test cluster name
836
+ `)),
837
+ withCmdLineFlags("--venafi-connection", "venafi-components", "--install-namespace", "venafi"))
838
+ require.NoError(t, err)
839
+ testutil.VenConnStartWatching(t, cl)
840
+ testutil.TrustCA(t, cl, cert)
841
+ err = cl.PostDataReadingsWithOptions(nil, client.Options{ClusterName: cfg.ClusterID})
842
+ require.NoError(t, err)
843
+ })
844
+
845
+ t.Run("--disable-compression works", func(t *testing.T) {
846
+ setVenafiCloudAssert(func(t testing.TB, gotReq *http.Request) {
847
+ // Let's check that the body isn't compressed.
848
+ assert.Equal(t, "", gotReq.Header.Get("Content-Encoding"))
849
+ b := new(bytes.Buffer)
850
+ _, err := b.ReadFrom(gotReq.Body)
851
+ require.NoError(t, err)
852
+ assert.Contains(t, b.String(), `{"agent_metadata":{"version":"development","cluster_id":"test cluster name"}`)
853
+ })
854
+ cfg, cl, err := ValidateAndCombineConfig(discardLogs(),
855
+ withConfig(testutil.Undent(`
856
+ server: `+srv.URL+`
857
+ period: 1h
858
+ cluster_id: test cluster name
859
+ `)),
860
+ withCmdLineFlags("--disable-compression", "--venafi-connection", "venafi-components", "--install-namespace", "venafi"))
861
+ require.NoError(t, err)
862
+ testutil.VenConnStartWatching(t, cl)
863
+ testutil.TrustCA(t, cl, cert)
864
+ err = cl.PostDataReadingsWithOptions(nil, client.Options{ClusterName: cfg.ClusterID})
865
+ require.NoError(t, err)
866
+ })
727
867
}
728
868
729
869
func Test_ParseConfig(t *testing.T) {
0 commit comments