func init() { const expectedUbuntuDHCPConfig = `# Generated by bosh-agent option rfc3442-classless-static-routes code 121 = array of unsigned integer 8; send host-name "<hostname>"; request subnet-mask, broadcast-address, time-offset, routers, domain-name, domain-name-servers, domain-search, host-name, netbios-name-servers, netbios-scope, interface-mtu, rfc3442-classless-static-routes, ntp-servers; prepend domain-name-servers zz.zz.zz.zz, yy.yy.yy.yy, xx.xx.xx.xx; ` Describe("ubuntuNetManager", func() { var ( fs *fakesys.FakeFileSystem cmdRunner *fakesys.FakeCmdRunner defaultNetworkResolver *fakenet.FakeDefaultNetworkResolver netManager NetManager ) BeforeEach(func() { fs = fakesys.NewFakeFileSystem() cmdRunner = fakesys.NewFakeCmdRunner() defaultNetworkResolver = &fakenet.FakeDefaultNetworkResolver{} logger := boshlog.NewLogger(boshlog.LevelNone) netManager = NewUbuntuNetManager(fs, cmdRunner, defaultNetworkResolver, 1*time.Millisecond, logger) }) Describe("SetupDhcp", func() { networks := boshsettings.Networks{ "bosh": boshsettings.Network{ Default: []string{"dns"}, DNS: []string{"xx.xx.xx.xx", "yy.yy.yy.yy", "zz.zz.zz.zz"}, }, "vip": boshsettings.Network{ Default: []string{}, DNS: []string{"aa.aa.aa.aa"}, }, } ItRestartsDhcp := func() { Context("when ifconfig version is 0.7", func() { BeforeEach(func() { cmdRunner.AddCmdResult("ifup --version", fakesys.FakeCmdResult{ Stdout: "ifup version 0.7.47", }) }) It("restarts dhclient", func() { err := netManager.SetupDhcp(networks) Expect(err).ToNot(HaveOccurred()) Expect(len(cmdRunner.RunCommands)).To(Equal(3)) Expect(cmdRunner.RunCommands[1]).To(Equal([]string{"ifdown", "-a", "--no-loopback"})) Expect(cmdRunner.RunCommands[2]).To(Equal([]string{"ifup", "-a", "--no-loopback"})) }) }) Context("when ifconfig version is 0.6", func() { BeforeEach(func() { cmdRunner.AddCmdResult("ifup --version", fakesys.FakeCmdResult{ Stdout: "ifup version 0.6.0", }) }) It("restarts dhclient", func() { err := netManager.SetupDhcp(networks) Expect(err).ToNot(HaveOccurred()) Expect(len(cmdRunner.RunCommands)).To(Equal(3)) Expect(cmdRunner.RunCommands[1]).To(Equal([]string{"ifdown", "-a", "--exclude=lo"})) Expect(cmdRunner.RunCommands[2]).To(Equal([]string{"ifup", "-a", "--exclude=lo"})) }) }) } ItUpdatesDhcp3Config := func() { It("updates /etc/dhcp3/dhclient.conf", func() { err := netManager.SetupDhcp(networks) Expect(err).ToNot(HaveOccurred()) dhcpConfig := fs.GetFileTestStat("/etc/dhcp3/dhclient.conf") Expect(dhcpConfig).ToNot(BeNil()) Expect(dhcpConfig.StringContents()).To(Equal(expectedUbuntuDHCPConfig)) }) } ItUpdatesDhcpConfig := func() { It("updates /etc/dhcp/dhclient.conf", func() { err := netManager.SetupDhcp(networks) Expect(err).ToNot(HaveOccurred()) dhcpConfig := fs.GetFileTestStat("/etc/dhcp/dhclient.conf") Expect(dhcpConfig).ToNot(BeNil()) Expect(dhcpConfig.StringContents()).To(Equal(expectedUbuntuDHCPConfig)) }) } ItDoesNotRestartDhcp := func() { It("does not restart dhclient", func() { err := netManager.SetupDhcp(networks) Expect(err).ToNot(HaveOccurred()) Expect(len(cmdRunner.RunCommands)).To(Equal(0)) }) } Context("when dhclient3 is installed on the system", func() { BeforeEach(func() { cmdRunner.CommandExistsValue = true }) Context("when dhcp was not previously configured", func() { ItUpdatesDhcp3Config() ItRestartsDhcp() }) Context("when dhcp was previously configured with different configuration", func() { BeforeEach(func() { fs.WriteFileString("/etc/dhcp3/dhclient.conf", "fake-other-configuration") }) ItUpdatesDhcp3Config() ItRestartsDhcp() }) Context("when dhcp was previously configured with the same configuration", func() { BeforeEach(func() { fs.WriteFileString("/etc/dhcp3/dhclient.conf", expectedUbuntuDHCPConfig) }) ItUpdatesDhcp3Config() ItDoesNotRestartDhcp() }) }) Context("when dhclient3 is not installed on the system", func() { BeforeEach(func() { cmdRunner.CommandExistsValue = false }) Context("when dhcp was not previously configured", func() { ItUpdatesDhcpConfig() ItRestartsDhcp() }) Context("when dhcp was previously configured with different configuration", func() { BeforeEach(func() { fs.WriteFileString("/etc/dhcp/dhclient.conf", "fake-other-configuration") }) ItUpdatesDhcpConfig() ItRestartsDhcp() }) Context("when dhcp was previously configured with the same configuration", func() { BeforeEach(func() { fs.WriteFileString("/etc/dhcp/dhclient.conf", expectedUbuntuDHCPConfig) }) ItUpdatesDhcpConfig() ItDoesNotRestartDhcp() }) }) }) Describe("SetupManualNetworking", func() { var errCh chan error BeforeEach(func() { errCh = make(chan error) }) BeforeEach(func() { // For mac addr to interface resolution fs.WriteFile("/sys/class/net/eth0", []byte{}) fs.WriteFileString("/sys/class/net/eth0/address", "22:00:0a:1f:ac:2a\n") fs.SetGlob("/sys/class/net/*", []string{"/sys/class/net/eth0"}) }) networks := boshsettings.Networks{ "bosh": boshsettings.Network{ Default: []string{"dns", "gateway"}, IP: "192.168.195.6", Netmask: "255.255.255.0", Gateway: "192.168.195.1", Mac: "22:00:0a:1f:ac:2a", DNS: []string{"10.80.130.2", "10.80.130.1"}, }, } Context("when manual networking was not previously configured", func() { It("writes /etc/network/interfaces", func() { err := netManager.SetupManualNetworking(networks, nil) Expect(err).ToNot(HaveOccurred()) networkConfig := fs.GetFileTestStat("/etc/network/interfaces") Expect(networkConfig).ToNot(BeNil()) Expect(networkConfig.StringContents()).To(Equal(expectedUbuntuNetworkInterfaces)) }) It("restarts networking", func() { err := netManager.SetupManualNetworking(networks, errCh) Expect(err).ToNot(HaveOccurred()) <-errCh // wait for all arpings Expect(len(cmdRunner.RunCommands) >= 2).To(BeTrue()) Expect(cmdRunner.RunCommands[0]).To(Equal([]string{"service", "network-interface", "stop", "INTERFACE=eth0"})) Expect(cmdRunner.RunCommands[1]).To(Equal([]string{"service", "network-interface", "start", "INTERFACE=eth0"})) }) It("updates dns", func() { err := netManager.SetupManualNetworking(networks, nil) Expect(err).ToNot(HaveOccurred()) resolvConf := fs.GetFileTestStat("/etc/resolv.conf") Expect(resolvConf).ToNot(BeNil()) Expect(resolvConf.StringContents()).To(Equal(expectedUbuntuResolvConf)) }) It("starts sending arping", func() { err := netManager.SetupManualNetworking(networks, errCh) Expect(err).ToNot(HaveOccurred()) <-errCh // wait for all arpings Expect(cmdRunner.RunCommands[2]).To(Equal([]string{"arping", "-c", "1", "-U", "-I", "eth0", "192.168.195.6"})) Expect(cmdRunner.RunCommands[7]).To(Equal([]string{"arping", "-c", "1", "-U", "-I", "eth0", "192.168.195.6"})) }) }) Context("when manual networking was previously configured with different configuration", func() { BeforeEach(func() { fs.WriteFileString("/etc/network/interfaces", "fake-manual-config") }) It("updates /etc/network/interfaces", func() { err := netManager.SetupManualNetworking(networks, nil) Expect(err).ToNot(HaveOccurred()) networkConfig := fs.GetFileTestStat("/etc/network/interfaces") Expect(networkConfig).ToNot(BeNil()) Expect(networkConfig.StringContents()).To(Equal(expectedUbuntuNetworkInterfaces)) }) It("restarts networking", func() { err := netManager.SetupManualNetworking(networks, errCh) Expect(err).ToNot(HaveOccurred()) <-errCh // wait for all arpings Expect(len(cmdRunner.RunCommands) >= 2).To(BeTrue()) Expect(cmdRunner.RunCommands[0]).To(Equal([]string{"service", "network-interface", "stop", "INTERFACE=eth0"})) Expect(cmdRunner.RunCommands[1]).To(Equal([]string{"service", "network-interface", "start", "INTERFACE=eth0"})) }) It("updates dns", func() { err := netManager.SetupManualNetworking(networks, nil) Expect(err).ToNot(HaveOccurred()) resolvConf := fs.GetFileTestStat("/etc/resolv.conf") Expect(resolvConf).ToNot(BeNil()) Expect(resolvConf.StringContents()).To(Equal(expectedUbuntuResolvConf)) }) It("starts sending 6 arp pings", func() { err := netManager.SetupManualNetworking(networks, errCh) Expect(err).ToNot(HaveOccurred()) <-errCh // wait for all arpings Expect(cmdRunner.RunCommands[2]).To(Equal([]string{"arping", "-c", "1", "-U", "-I", "eth0", "192.168.195.6"})) Expect(cmdRunner.RunCommands[7]).To(Equal([]string{"arping", "-c", "1", "-U", "-I", "eth0", "192.168.195.6"})) }) }) Context("when manual networking was previously configured with same configuration", func() { BeforeEach(func() { fs.WriteFileString("/etc/network/interfaces", expectedUbuntuNetworkInterfaces) }) It("keeps same /etc/network/interfaces", func() { err := netManager.SetupManualNetworking(networks, nil) Expect(err).ToNot(HaveOccurred()) networkConfig := fs.GetFileTestStat("/etc/network/interfaces") Expect(networkConfig).ToNot(BeNil()) Expect(networkConfig.StringContents()).To(Equal(expectedUbuntuNetworkInterfaces)) }) It("does not restart networking because configuration did not change", func() { err := netManager.SetupManualNetworking(networks, errCh) Expect(err).ToNot(HaveOccurred()) <-errCh // wait for all arpings for _, cmd := range cmdRunner.RunCommands { Expect(cmd[0]).ToNot(Equal("service")) } }) It("updates /etc/resolv.conf for DNS", func() { err := netManager.SetupManualNetworking(networks, nil) Expect(err).ToNot(HaveOccurred()) resolvConf := fs.GetFileTestStat("/etc/resolv.conf") Expect(resolvConf).ToNot(BeNil()) Expect(resolvConf.StringContents()).To(Equal(expectedUbuntuResolvConf)) }) It("starts sending 6 arp ping", func() { err := netManager.SetupManualNetworking(networks, errCh) Expect(err).ToNot(HaveOccurred()) <-errCh // wait for all arpings Expect(len(cmdRunner.RunCommands)).To(Equal(6)) Expect(cmdRunner.RunCommands[0]).To(Equal([]string{"arping", "-c", "1", "-U", "-I", "eth0", "192.168.195.6"})) Expect(cmdRunner.RunCommands[5]).To(Equal([]string{"arping", "-c", "1", "-U", "-I", "eth0", "192.168.195.6"})) }) }) }) }) }
"time" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" . "bosh/agent/action" boshas "bosh/agent/applier/applyspec" fakeas "bosh/agent/applier/applyspec/fakes" boshsys "bosh/system" fakesys "bosh/system/fakes" ) var _ = Describe("RunErrand", func() { var ( specService *fakeas.FakeV1Service cmdRunner *fakesys.FakeCmdRunner action RunErrandAction ) BeforeEach(func() { specService = fakeas.NewFakeV1Service() cmdRunner = fakesys.NewFakeCmdRunner() action = NewRunErrand(specService, "/fake-jobs-dir", cmdRunner) }) It("is asynchronous", func() { Expect(action.IsAsynchronous()).To(BeTrue()) }) It("is not persistent", func() { Expect(action.IsPersistent()).To(BeFalse())
package net_test import ( "errors" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" . "bosh/platform/net" fakesys "bosh/system/fakes" ) var _ = Describe("cmdRoutesSeacher", func() { var ( runner *fakesys.FakeCmdRunner searcher RoutesSearcher ) BeforeEach(func() { runner = fakesys.NewFakeCmdRunner() searcher = NewCmdRoutesSearcher(runner) }) Describe("SearchRoutes", func() { Context("when running command succeeds", func() { It("returns parsed routes information", func() { runner.AddCmdResult("route -n", fakesys.FakeCmdResult{ Stdout: `Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 172.16.79.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
package cdrom_test import ( . "bosh/platform/cdrom" fakeudev "bosh/platform/cdrom/udevdevice/fakes" fakesys "bosh/system/fakes" "errors" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) var _ = Describe("LinuxCdrom", func() { var ( udev *fakeudev.FakeUdevDevice runner *fakesys.FakeCmdRunner cd Cdrom ) BeforeEach(func() { udev = fakeudev.NewFakeUdevDevice() runner = fakesys.NewFakeCmdRunner() }) JustBeforeEach(func() { cd = NewLinuxCdrom("/dev/sr0", udev, runner) }) Describe("WaitForMedia", func() { It("polls the cdrom to force udev to notice it", func() { err := cd.WaitForMedia() Expect(err).NotTo(HaveOccurred())
import ( "errors" "os" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" . "bosh/agent/cmdrunner" boshsys "bosh/system" fakesys "bosh/system/fakes" ) var _ = Describe("FileLoggingCmdRunner", func() { var ( fs *fakesys.FakeFileSystem cmdRunner *fakesys.FakeCmdRunner cmd boshsys.Command runner CmdRunner ) BeforeEach(func() { fs = fakesys.NewFakeFileSystem() cmdRunner = fakesys.NewFakeCmdRunner() runner = NewFileLoggingCmdRunner(fs, cmdRunner, "/fake-base-dir", 15) cmd = boshsys.Command{ Name: "fake-cmd", Args: []string{"fake-args"}, Env: map[string]string{"fake-env-key": "fake-env-var"}, WorkingDir: "/fake-working-dir", } })
s.mounts = s.mounts[1:] return result, nil } const swaponUsageOutput = `Filename Type Size Used Priority /dev/swap partition 78180316 0 -1 ` const swaponUsageOutputWithOtherDevice = `Filename Type Size Used Priority /dev/swap2 partition 78180316 0 -1 ` var _ = Describe("linuxMounter", func() { var ( runner *fakesys.FakeCmdRunner mountsSearcher *fakedisk.FakeMountsSearcher mounter Mounter ) BeforeEach(func() { runner = fakesys.NewFakeCmdRunner() mountsSearcher = &fakedisk.FakeMountsSearcher{} mounter = NewLinuxMounter(runner, mountsSearcher, 1*time.Millisecond) }) Describe("Mount", func() { It("allows to mount disk at given mount point", func() { err := mounter.Mount("/dev/foo", "/mnt/foo") Expect(err).ToNot(HaveOccurred()) Expect(1).To(Equal(len(runner.RunCommands))) Expect(runner.RunCommands[0]).To(Equal([]string{"mount", "/dev/foo", "/mnt/foo"}))
. "github.com/onsi/ginkgo" . "github.com/onsi/gomega" boshassert "bosh/assert" . "bosh/blobstore" boshdir "bosh/settings/directories" fakesys "bosh/system/fakes" fakeuuid "bosh/uuid/fakes" ) var _ = Describe("external", func() { var ( fs *fakesys.FakeFileSystem runner *fakesys.FakeCmdRunner uuidGen *fakeuuid.FakeGenerator configPath string blobstore Blobstore ) BeforeEach(func() { fs = fakesys.NewFakeFileSystem() runner = fakesys.NewFakeCmdRunner() uuidGen = &fakeuuid.FakeGenerator{} dirProvider := boshdir.NewDirectoriesProvider("/var/vcap") configPath = filepath.Join(dirProvider.EtcDir(), "blobstore-fake-provider.json") blobstore = NewExternalBlobstore("fake-provider", map[string]interface{}{}, fs, runner, uuidGen, configPath) }) Describe("Validate", func() { It("external validate writes config file", func() {
package disk_test import ( "errors" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" . "bosh/platform/disk" fakesys "bosh/system/fakes" ) var _ = Describe("cmdMountsSeacher", func() { var ( runner *fakesys.FakeCmdRunner searcher MountsSearcher ) BeforeEach(func() { runner = fakesys.NewFakeCmdRunner() searcher = NewCmdMountsSearcher(runner) }) Describe("SearchMounts", func() { Context("when running command succeeds", func() { It("returns parsed mount information", func() { runner.AddCmdResult("mount", fakesys.FakeCmdResult{ Stdout: `devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620) tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755) /dev/sda1 on /boot type ext2 (rw) none on /tmp/warden/cgroup type tmpfs (rw)`,
jobNextState string jobNextStateErr error } func (p fakeDrainParams) JobChange() (change string) { return p.jobChange } func (p fakeDrainParams) HashChange() (change string) { return p.hashChange } func (p fakeDrainParams) UpdatedPackages() (pkgs []string) { return p.updatedPackages } func (p fakeDrainParams) JobState() (string, error) { return p.jobState, p.jobStateErr } func (p fakeDrainParams) JobNextState() (string, error) { return p.jobNextState, p.jobNextStateErr } var _ = Describe("ConcreteDrainScript", func() { var ( runner *fakesys.FakeCmdRunner fs *fakesys.FakeFileSystem drainScript ConcreteDrainScript ) BeforeEach(func() { fs = fakesys.NewFakeFileSystem() runner = fakesys.NewFakeCmdRunner() drainScript = NewConcreteDrainScript(fs, runner, "/fake/script") }) Describe("Run", func() { var ( params fakeDrainParams ) BeforeEach(func() {
boshlog "bosh/logger" . "bosh/platform/net" fakearp "bosh/platform/net/arp/fakes" fakenet "bosh/platform/net/fakes" boship "bosh/platform/net/ip" fakeip "bosh/platform/net/ip/fakes" boshsettings "bosh/settings" fakesys "bosh/system/fakes" ) var _ = Describe("ubuntuNetManager", func() { var ( fs *fakesys.FakeFileSystem cmdRunner *fakesys.FakeCmdRunner defaultNetworkResolver *fakenet.FakeDefaultNetworkResolver ipResolver *fakeip.FakeIPResolver addressBroadcaster *fakearp.FakeAddressBroadcaster netManager NetManager ) BeforeEach(func() { fs = fakesys.NewFakeFileSystem() cmdRunner = fakesys.NewFakeCmdRunner() defaultNetworkResolver = &fakenet.FakeDefaultNetworkResolver{} ipResolver = &fakeip.FakeIPResolver{} addressBroadcaster = &fakearp.FakeAddressBroadcaster{} logger := boshlog.NewLogger(boshlog.LevelNone) netManager = NewUbuntuNetManager( fs, cmdRunner, defaultNetworkResolver,