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  })