14325: Log stderr from last boot-probe when giving up on boot.
[arvados.git] / lib / cloud / azure_test.go
index a123bc4bb565ceefc5d1dc7ea71f82ce869f8353..f74688bb180c98cb867eba92ce619a6f0f21b30e 100644 (file)
@@ -1,6 +1,28 @@
 // Copyright (C) The Arvados Authors. All rights reserved.
 //
 // SPDX-License-Identifier: AGPL-3.0
+//
+//
+// How to manually run individual tests against the real cloud
+//
+// $ go test -v git.curoverse.com/arvados.git/lib/cloud -live-azure-cfg azconfig.yml -check.f=TestListInstances
+//
+// Example azconfig.yml:
+//
+// subscription_id: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
+// key: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
+// region: centralus
+// cloud_environment: AzurePublicCloud
+// secret: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+// tenant_id: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
+// resource_group: zzzzz
+// network: zzzzz
+// subnet: zzzzz-subnet-private
+// storage_account: example
+// blob_container: vhds
+// image: "https://example.blob.core.windows.net/system/Microsoft.Compute/Images/images/zzzzz-compute-osDisk.XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.vhd"
+// delete_dangling_resources_after: 20
+// authorized_key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLQS1ExT2+WjA0d/hntEAyAtgeN1W2ik2QX8c2zO6HjlPHWXL92r07W0WMuDib40Pcevpi1BXeBWXA9ZB5KKMJB+ukaAu22KklnQuUmNvk6ZXnPKSkGxuCYvPQb08WhHf3p1VxiKfP3iauedBDM4x9/bkJohlBBQiFXzNUcQ+a6rKiMzmJN2gbL8ncyUzc+XQ5q4JndTwTGtOlzDiGOc9O4z5Dd76wtAVJneOuuNpwfFRVHThpJM6VThpCZOnl8APaceWXKeuwOuCae3COZMz++xQfxOfZ9Z8aIwo+TlQhsRaNfZ4Vjrop6ej8dtfZtgUFKfbXEOYaHrGrWGotFDTD example@example"
 
 package cloud
 
@@ -19,10 +41,12 @@ import (
        "git.curoverse.com/arvados.git/sdk/go/config"
        "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2018-06-01/compute"
        "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2018-06-01/network"
+       "github.com/Azure/azure-sdk-for-go/storage"
        "github.com/Azure/go-autorest/autorest"
        "github.com/Azure/go-autorest/autorest/azure"
        "github.com/Azure/go-autorest/autorest/to"
        "github.com/jmcvetta/randutil"
+       "github.com/sirupsen/logrus"
        "golang.org/x/crypto/ssh"
        check "gopkg.in/check.v1"
 )
@@ -33,6 +57,8 @@ var _ = check.Suite(&AzureInstanceSetSuite{})
 
 type VirtualMachinesClientStub struct{}
 
+var testKey []byte = []byte(`ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLQS1ExT2+WjA0d/hntEAyAtgeN1W2ik2QX8c2zO6HjlPHWXL92r07W0WMuDib40Pcevpi1BXeBWXA9ZB5KKMJB+ukaAu22KklnQuUmNvk6ZXnPKSkGxuCYvPQb08WhHf3p1VxiKfP3iauedBDM4x9/bkJohlBBQiFXzNUcQ+a6rKiMzmJN2gbL8ncyUzc+XQ5q4JndTwTGtOlzDiGOc9O4z5Dd76wtAVJneOuuNpwfFRVHThpJM6VThpCZOnl8APaceWXKeuwOuCae3COZMz++xQfxOfZ9Z8aIwo+TlQhsRaNfZ4Vjrop6ej8dtfZtgUFKfbXEOYaHrGrWGotFDTD example@example`)
+
 func (*VirtualMachinesClientStub) CreateOrUpdate(ctx context.Context,
        resourceGroupName string,
        VMName string,
@@ -90,7 +116,7 @@ func GetInstanceSet() (InstanceSet, ImageID, arvados.Cluster, error) {
                if err != nil {
                        return nil, ImageID(""), cluster, err
                }
-               ap, err := NewAzureInstanceSet(cfg, "test123")
+               ap, err := NewAzureInstanceSet(cfg, "test123", logrus.StandardLogger())
                return ap, ImageID(cfg["image"].(string)), cluster, err
        } else {
                ap := AzureInstanceSet{
@@ -99,7 +125,11 @@ func GetInstanceSet() (InstanceSet, ImageID, arvados.Cluster, error) {
                        },
                        dispatcherID: "test123",
                        namePrefix:   "compute-test123-",
+                       logger:       logrus.StandardLogger(),
+                       deleteNIC:    make(chan string),
+                       deleteBlob:   make(chan storage.Blob),
                }
+               ap.ctx, ap.stopFunc = context.WithCancel(context.Background())
                ap.vmClient = &VirtualMachinesClientStub{}
                ap.netClient = &InterfacesClientStub{}
                return &ap, ImageID("blob"), cluster, nil
@@ -112,20 +142,13 @@ func (*AzureInstanceSetSuite) TestCreate(c *check.C) {
                c.Fatal("Error making provider", err)
        }
 
-       f, err := os.Open("azconfig_sshkey.pub")
-       c.Assert(err, check.IsNil)
-
-       keybytes, err := ioutil.ReadAll(f)
-       c.Assert(err, check.IsNil)
-
-       pk, _, _, _, err := ssh.ParseAuthorizedKey(keybytes)
+       pk, _, _, _, err := ssh.ParseAuthorizedKey(testKey)
        c.Assert(err, check.IsNil)
 
        nodetoken, err := randutil.String(40, "abcdefghijklmnopqrstuvwxyz0123456789")
        c.Assert(err, check.IsNil)
 
-       inst, err := ap.Create(context.Background(),
-               cluster.InstanceTypes["tiny"],
+       inst, err := ap.Create(cluster.InstanceTypes["tiny"],
                img, map[string]string{
                        "node-token": nodetoken},
                pk)
@@ -143,7 +166,7 @@ func (*AzureInstanceSetSuite) TestListInstances(c *check.C) {
                c.Fatal("Error making provider", err)
        }
 
-       l, err := ap.Instances(context.Background(), nil)
+       l, err := ap.Instances(nil)
 
        c.Assert(err, check.IsNil)
 
@@ -159,7 +182,8 @@ func (*AzureInstanceSetSuite) TestManageNics(c *check.C) {
                c.Fatal("Error making provider", err)
        }
 
-       ap.(*AzureInstanceSet).ManageNics(context.Background())
+       ap.(*AzureInstanceSet).ManageNics()
+       ap.Stop()
 }
 
 func (*AzureInstanceSetSuite) TestManageBlobs(c *check.C) {
@@ -168,7 +192,8 @@ func (*AzureInstanceSetSuite) TestManageBlobs(c *check.C) {
                c.Fatal("Error making provider", err)
        }
 
-       ap.(*AzureInstanceSet).ManageBlobs(context.Background())
+       ap.(*AzureInstanceSet).ManageBlobs()
+       ap.Stop()
 }
 
 func (*AzureInstanceSetSuite) TestDestroyInstances(c *check.C) {
@@ -177,11 +202,11 @@ func (*AzureInstanceSetSuite) TestDestroyInstances(c *check.C) {
                c.Fatal("Error making provider", err)
        }
 
-       l, err := ap.Instances(context.Background(), nil)
+       l, err := ap.Instances(nil)
        c.Assert(err, check.IsNil)
 
        for _, i := range l {
-               c.Check(i.Destroy(context.Background()), check.IsNil)
+               c.Check(i.Destroy(), check.IsNil)
        }
 }
 
@@ -239,16 +264,16 @@ func (*AzureInstanceSetSuite) TestSetTags(c *check.C) {
        if err != nil {
                c.Fatal("Error making provider", err)
        }
-       l, err := ap.Instances(context.Background(), nil)
+       l, err := ap.Instances(nil)
        c.Assert(err, check.IsNil)
 
        if len(l) > 0 {
-               err = l[0].SetTags(context.Background(), map[string]string{"foo": "bar"})
+               err = l[0].SetTags(map[string]string{"foo": "bar"})
                if err != nil {
                        c.Fatal("Error setting tags", err)
                }
        }
-       l, err = ap.Instances(context.Background(), nil)
+       l, err = ap.Instances(nil)
        c.Assert(err, check.IsNil)
 
        if len(l) > 0 {
@@ -262,7 +287,7 @@ func (*AzureInstanceSetSuite) TestSSH(c *check.C) {
        if err != nil {
                c.Fatal("Error making provider", err)
        }
-       l, err := ap.Instances(context.Background(), nil)
+       l, err := ap.Instances(nil)
        c.Assert(err, check.IsNil)
 
        if len(l) > 0 {
@@ -316,7 +341,7 @@ func SetupSSHClient(c *check.C, inst Instance) (*ssh.Client, error) {
                return nil, errors.New("BUG: key was never provided to HostKeyCallback")
        }
 
-       err = inst.VerifyHostKey(context.Background(), receivedKey, client)
+       err = inst.VerifyHostKey(receivedKey, client)
        c.Assert(err, check.IsNil)
 
        return client, nil