github.com/solo-io/service-mesh-hub@v0.9.2/test/e2e/istio/extensions_test.go (about) 1 package istio_test 2 3 import ( 4 "fmt" 5 "time" 6 7 "github.com/solo-io/service-mesh-hub/pkg/api/settings.smh.solo.io/v1alpha2" 8 "github.com/solo-io/service-mesh-hub/pkg/common/defaults" 9 "github.com/solo-io/service-mesh-hub/test/extensions" 10 "github.com/solo-io/service-mesh-hub/test/utils" 11 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 12 13 . "github.com/onsi/ginkgo" 14 . "github.com/onsi/gomega" 15 ) 16 17 var _ = Describe("Istio Networking Extensions", func() { 18 var ( 19 err error 20 manifest utils.Manifest 21 smhNamespace = defaults.GetPodNamespace() 22 ) 23 24 AfterEach(func() { 25 manifest, err = utils.NewManifest("default-settings.yaml") 26 Expect(err).NotTo(HaveOccurred()) 27 // update settings to remove our extensions server 28 err = manifest.AppendResources(&v1alpha2.Settings{ 29 TypeMeta: metav1.TypeMeta{ 30 Kind: "Settings", 31 APIVersion: v1alpha2.SchemeGroupVersion.String(), 32 }, 33 ObjectMeta: metav1.ObjectMeta{ 34 Namespace: smhNamespace, 35 Name: "settings", // the default/expected name 36 }, 37 }) 38 Expect(err).NotTo(HaveOccurred()) 39 err = manifest.KubeApply(smhNamespace) 40 Expect(err).NotTo(HaveOccurred()) 41 }) 42 43 It("enables communication across clusters using global dns names", func() { 44 manifest, err = utils.NewManifest("extension-settings.yaml") 45 Expect(err).NotTo(HaveOccurred()) 46 47 By("with extensions enabled, additional configs can be added to SMH outputs", func() { 48 49 helloMsg := "hello from a 3rd party" 50 51 srv := extensions.NewTestExtensionsServer() 52 53 // run extensions server 54 go func() { 55 defer GinkgoRecover() 56 err := srv.Run() 57 Expect(err).NotTo(HaveOccurred()) 58 }() 59 // run hello server 60 go func() { 61 defer GinkgoRecover() 62 err := extensions.RunHelloServer(helloMsg) 63 Expect(err).NotTo(HaveOccurred()) 64 }() 65 66 // update settings to connect our extensions server 67 err = manifest.AppendResources(&v1alpha2.Settings{ 68 TypeMeta: metav1.TypeMeta{ 69 Kind: "Settings", 70 APIVersion: v1alpha2.SchemeGroupVersion.String(), 71 }, 72 ObjectMeta: metav1.ObjectMeta{ 73 Namespace: smhNamespace, 74 Name: "settings", // the default/expected name 75 }, 76 Spec: v1alpha2.SettingsSpec{ 77 NetworkingExtensionServers: []*v1alpha2.NetworkingExtensionsServer{{ 78 // use the machine's docker host address 79 Address: fmt.Sprintf("%v:%v", extensions.DockerHostAddress, extensions.ExtensionsServerPort), 80 Insecure: true, 81 ReconnectOnNetworkFailures: true, 82 }}, 83 }, 84 }) 85 Expect(err).NotTo(HaveOccurred()) 86 err = manifest.KubeApply(smhNamespace) 87 Expect(err).NotTo(HaveOccurred()) 88 89 // ensure the server eventually connects to us 90 Eventually(srv.HasConnected, time.Minute*2).Should(BeTrue()) 91 92 // check we can eventually hit the echo server via the gateway. 93 // This request verifies that Envoy has config provided by Service Entries from our test extensions server. 94 Eventually(curlHelloServer, "30s", "1s").Should(ContainSubstring(helloMsg)) 95 }) 96 }) 97 })