Ejemplo n.º 1
0
        public void Test()
        {
            // Deploy a couple of simple NodeJS based services, one listening on
            // port 8080 and the other on 8081.  We're also going to use the
            // [HostsFixture] to map a couple of DNS names to a hive manager
            // address and then use these to query the services.

            // Confirm that the hive starts out with no running stacks or services.

            Assert.Empty(hiveFixture.ListStacks());
            Assert.Empty(hiveFixture.ListServices());

            // Add the local DNS entries for the services we'll deploy.  We're
            // publishing these on host ports, so we'll map the DNS entries to
            // the local loopback address.

            var managerAddress = hive.FirstManager.PrivateAddress.ToString();

            hosts.AddHostAddress("foo.com", managerAddress, deferCommit: true);
            hosts.AddHostAddress("bar.com", managerAddress, deferCommit: true);
            hosts.Commit();

            // Spin up a couple of NodeJS as stacks configuring them to return
            // different text using the OUTPUT environment variable.

            hiveFixture.CreateService("foo", "nhive/node", dockerArgs: new string[] { "--publish", "8080:80" }, env: new string[] { "OUTPUT=FOO" });
            hiveFixture.CreateService("bar", "nhive/node", dockerArgs: new string[] { "--publish", "8081:80" }, env: new string[] { "OUTPUT=BAR" });

            // Verify that each of the services are returning the expected output.

            using (var client = new HttpClient())
            {
                Assert.Equal("FOO", client.GetStringAsync("http://foo.com:8080").Result.Trim());
                Assert.Equal("BAR", client.GetStringAsync("http://bar.com:8081").Result.Trim());
            }

            // Remove one of the services and verify.

            hiveFixture.RemoveStack("foo-service");
            Assert.Empty(hiveFixture.ListServices().Where(s => s.Name == "foo-service"));
        }
Ejemplo n.º 2
0
        public Test_ComposedFixture(ComposedFixture composedFixture)
        {
            this.composedFixture = composedFixture;

            var fixtureStatus = composedFixture.Start(
                () =>
            {
                // NOTE: Adding this one first because it clears the local Docker
                //       state when it starts and we want the containers started
                //       by the other fixtures to be unmolested.

                composedFixture.AddFixture("docker", new DockerFixture());

                composedFixture.AddFixture("aspNet", new AspNetFixture(),
                                           aspNetFixture =>
                {
                    aspNetFixture.StartAsComposed <Startup>();
                });

                composedFixture.AddFixture("container", new ContainerFixture(),
                                           containerFixture =>
                {
                    containerFixture.StartAsComposed("my-container", $"{NeonHelper.NeonLibraryBranchRegistry}/test:latest");
                });

                composedFixture.AddFixture("hosts", new HostsFixture());

                composedFixture.AddFixture("nats", new NatsFixture(),
                                           natsFixture =>
                {
                    natsFixture.StartAsComposed();
                });
            });

            this.aspNetFixture    = (AspNetFixture)composedFixture["aspNet"];
            this.dockerFixture    = (DockerFixture)composedFixture["docker"];
            this.containerFixture = (ContainerFixture)composedFixture["container"];
            this.hostsFixture     = (HostsFixture)composedFixture["hosts"];
            this.natsFixture      = (NatsFixture)composedFixture["nats"];

            if (fixtureStatus == TestFixtureStatus.Started)
            {
                hostsFixture.AddHostAddress("foo.bar", "127.1.2.3");
            }
        }
Ejemplo n.º 3
0
        public async Task HostsDbStacks()
        {
            // Deploy a couple of simple NodeJS based services as stacks, one
            // listening on  port 8080 and the other on 8081.  We're also going
            // to use the [HostsFixture] to map a couple of DNS names to the local
            // loopback address and then use these to query the services and finally,
            // we're going to do some things to Couchbase.

            // Confirm that Docker starts out with no running stacks or services.

            Assert.Empty(fixture.ListStacks());
            Assert.Empty(fixture.ListServices());

            // Use the [HostsFixture] to initialize a couple DNS entries and then verify that these work.

            hosts.AddHostAddress("test-foo.com", "127.0.0.1", deferCommit: true);
            hosts.AddHostAddress("test-bar.com", "127.0.0.1", deferCommit: true);
            hosts.Commit();

            Assert.Equal(new IPAddress[] { IPAddress.Parse("127.0.0.1") }, Dns.GetHostAddresses("test-foo.com"));
            Assert.Equal(new IPAddress[] { IPAddress.Parse("127.0.0.1") }, Dns.GetHostAddresses("test-bar.com"));

            // Spin up a couple of NodeJS services configuring them to return
            // different text using the OUTPUT environment variable.

            var fooCompose =
                @"version: '3'

services:
  web:
    image: nhive/node
    ports:
      - ""8080:80""
    environment:
      - ""OUTPUT=FOO""
";

            fixture.DeployStack("foo-stack", fooCompose);

            var barCompose =
                @"version: '3'

services:
  web:
    image: nhive/node
    ports:
      - ""8081:80""
    environment:
      - ""OUTPUT=BAR""
";

            fixture.DeployStack("bar-stack", barCompose);

            // Verify that each of the services are returning the expected output.

            using (var client = new HttpClient())
            {
                Assert.Equal("FOO", client.GetStringAsync("http://test-foo.com:8080").Result.Trim());
                Assert.Equal("BAR", client.GetStringAsync("http://test-bar.com:8081").Result.Trim());
            }

            // Do some Couchbase operations to prove that we can.

            bucket.UpsertSafeAsync("one", "1").Wait();
            bucket.UpsertSafeAsync("two", "2").Wait();

            Assert.Equal("1", await bucket.GetSafeAsync <string>("one"));
            Assert.Equal("2", await bucket.GetSafeAsync <string>("two"));

            // Remove one of the stacks and verify.

            fixture.RemoveStack("foo-stack");
            Assert.Empty(fixture.ListStacks().Where(s => s.Name == "foo-stack"));
        }