func TestVolumeFromImageScenarios(t *testing.T) {
	if testing.Short() {
		t.Skip("skipping test in short mode.")
	}

	imageID := os.Getenv("VATestImageID")

	if imageID == "" {
		t.Skip("Skipping test as not all env variables are set: 'VATestImageID'")
	}

	authenticator, err := identity.AuthenticateFromEnvVars()
	if err != nil {
		t.Fatal("Cannot authenticate from env vars:", err)
	}

	blockstorageService := blockstorage.NewService(authenticator)

	volumeTypes, err := blockstorageService.VolumeTypes()
	if err != nil {
		t.Fatal("Cannot access volumeTypes:", err)
	}

	volumes, err := blockstorageService.Volumes()
	if err != nil {
		t.Fatal("Cannot access volumes:", err)
	}

	if len(volumes) > 0 {
		_, err := blockstorageService.Volume(volumes[0].ID)
		if err != nil {
			t.Fatal("Cannot requery volume:", err)
		}
	}

	createVolumeParameters := blockstorage.CreateVolumeParameters{
		DisplayName: "TestVolumeDisplayNameFromImage",
		Desciption:  "test description",
		VolumeType:  volumeTypes[0].ID,
		Size:        5,
		ImageRef:    imageID,
	}

	createdVolume, err := blockstorageService.CreateVolume(createVolumeParameters)
	if err != nil {
		t.Fatal("Cannot create volume:", err)
	}

	queriedVolume, err := blockstorageService.Volume(createdVolume.ID)
	if err != nil {
		t.Fatal("Cannot requery volume:", err)
	}

	err = blockstorageService.DeleteVolume(queriedVolume.ID)
	if err != nil {
		t.Fatal("Cannot delete volume:", err)
	}
}
func TestVolumeTypeScenarios(t *testing.T) {
	if testing.Short() {
		t.Skip("skipping test in short mode.")
	}

	authenticator, err := identity.AuthenticateFromEnvVars()
	if err != nil {
		t.Fatal("Cannot authenticate from env vars:", err)
	}

	blockstorageService := blockstorage.NewService(authenticator)

	volumeTypes, err := blockstorageService.VolumeTypes()
	if err != nil {
		t.Fatal("Cannot access volumeTypes:", err)
	}

	if len(volumeTypes) > 0 {
		_, err := blockstorageService.VolumeType(volumeTypes[0].ID)
		if err != nil {
			t.Fatal("Cannot requery volume type:", err)
		}
	}

	createVolumeParameters := blockstorage.CreateVolumeTypeParameters{Name: "nonstandard"}

	createdVolumeType, err := blockstorageService.CreateVolumeType(createVolumeParameters)

	skipRestOfTest := false
	if err != nil {
		status, ok := err.(misc.HTTPStatus)

		if ok && status.StatusCode == 404 || status.StatusCode == 403 {
			t.Log("Cannot test volume type create, so not attempting to delete.")
			skipRestOfTest = true
		} else {
			t.Fatal("Cannot create volume type:", err)
		}
	}

	if !skipRestOfTest {
		queriedVolumeType, err := blockstorageService.VolumeType(createdVolumeType.ID)
		if err != nil {
			t.Fatal("Cannot requery volume type:", err)
		}

		err = blockstorageService.DeleteVolumeType(queriedVolumeType.ID)
		if err != nil {
			t.Fatal("Cannot delete volume type:", err)
		}
	}
}
func CreateVolumeService(url string) blockstorage.Service {
	return blockstorage.NewService(common.SimpleAuthenticator{Token: tokn, ServiceURL: url})
}