Skip to content

Commit

Permalink
Merge pull request #306 from ritazh/fixes
Browse files Browse the repository at this point in the history
Ensuring all paths in powershell are passes and env vars
  • Loading branch information
k8s-ci-robot authored Aug 23, 2023
2 parents 7764ab9 + 2523e66 commit f5aded6
Show file tree
Hide file tree
Showing 8 changed files with 53 additions and 55 deletions.
5 changes: 4 additions & 1 deletion .github/workflows/windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ jobs:
go build -v -a -o ./bin/csi-proxy-api-gen.exe ./cmd/csi-proxy-api-gen
- name: Run Windows Integration Tests
run: |
# required for running Volume and Disk tests
Install-WindowsFeature -name Hyper-V-PowerShell
# start the CSI Proxy before running tests on windows
Start-Job -Name CSIProxy -ScriptBlock {
.\bin\csi-proxy.exe
Expand All @@ -28,7 +31,7 @@ jobs:
Write-Output "getting named pipes"
[System.IO.Directory]::GetFiles("\\.\\pipe\\")
$env:CSI_PROXY_GH_ACTIONS="TRUE"
go test -v -race ./integrationtests/...
go test -timeout 20m -v -race ./integrationtests/...
unit_tests:
strategy:
matrix:
Expand Down
4 changes: 0 additions & 4 deletions integrationtests/disk_v1_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,6 @@ func v1DiskTests(t *testing.T) {
})

t.Run("Get/SetDiskState", func(t *testing.T) {
skipTestOnCondition(t, isRunningOnGhActions())

client, err := diskv1client.NewClient()
require.NoError(t, err)

Expand Down Expand Up @@ -144,8 +142,6 @@ func v1DiskTests(t *testing.T) {
})

t.Run("PartitionDisk", func(t *testing.T) {
skipTestOnCondition(t, isRunningOnGhActions())

var err error
client, err := diskv1client.NewClient()
require.NoError(t, err)
Expand Down
4 changes: 0 additions & 4 deletions integrationtests/disk_v1alpha1_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,6 @@ func v1alpha1DiskTests(t *testing.T) {
})

t.Run("Rescan", func(t *testing.T) {
skipTestOnCondition(t, isRunningOnGhActions())

client, err := diskv1alpha1client.NewClient()
require.NoError(t, err)

Expand All @@ -47,8 +45,6 @@ func v1alpha1DiskTests(t *testing.T) {
})

t.Run("PartitionDisk", func(t *testing.T) {
skipTestOnCondition(t, isRunningOnGhActions())

var err error
client, err := diskv1alpha1client.NewClient()
require.NoError(t, err)
Expand Down
4 changes: 0 additions & 4 deletions integrationtests/disk_v1beta1_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,6 @@ func v1beta1DiskTests(t *testing.T) {
})

t.Run("Get/SetDiskState", func(t *testing.T) {
skipTestOnCondition(t, isRunningOnGhActions())

client, err := diskv1beta1client.NewClient()
require.NoError(t, err)

Expand Down Expand Up @@ -86,8 +84,6 @@ func v1beta1DiskTests(t *testing.T) {
})

t.Run("PartitionDisk", func(t *testing.T) {
skipTestOnCondition(t, isRunningOnGhActions())

var err error
client, err := diskv1beta1client.NewClient()
require.NoError(t, err)
Expand Down
4 changes: 0 additions & 4 deletions integrationtests/disk_v1beta2_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,6 @@ func v1beta2DiskTests(t *testing.T) {
})

t.Run("Get/SetDiskState", func(t *testing.T) {
skipTestOnCondition(t, isRunningOnGhActions())

client, err := diskv1beta2client.NewClient()
require.NoError(t, err)

Expand Down Expand Up @@ -127,8 +125,6 @@ func v1beta2DiskTests(t *testing.T) {
})

t.Run("PartitionDisk", func(t *testing.T) {
skipTestOnCondition(t, isRunningOnGhActions())

var err error
client, err := diskv1beta2client.NewClient()
require.NoError(t, err)
Expand Down
4 changes: 0 additions & 4 deletions integrationtests/disk_v1beta3_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,6 @@ func v1beta3DiskTests(t *testing.T) {
})

t.Run("Get/SetDiskState", func(t *testing.T) {
skipTestOnCondition(t, isRunningOnGhActions())

client, err := diskv1beta3client.NewClient()
require.NoError(t, err)

Expand Down Expand Up @@ -144,8 +142,6 @@ func v1beta3DiskTests(t *testing.T) {
})

t.Run("PartitionDisk", func(t *testing.T) {
skipTestOnCondition(t, isRunningOnGhActions())

var err error
client, err := diskv1beta3client.NewClient()
require.NoError(t, err)
Expand Down
10 changes: 2 additions & 8 deletions integrationtests/volume_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -148,32 +148,26 @@ func TestVolumeAPIs(t *testing.T) {
negativeVolumeTests(t)
})

// TODO: These tests will fail on Github Actions because Hyper-V is disabled
// see https://github.com/actions/virtual-environments/pull/2525
// Github Actions WS 2022 supports hyper-v
// must install management tools manually

// these tests should be considered frozen from the API point of view
t.Run("v1alpha1Tests", func(t *testing.T) {
skipTestOnCondition(t, isRunningOnGhActions())
v1alpha1VolumeTests(t)
})
t.Run("v1beta1Tests", func(t *testing.T) {
skipTestOnCondition(t, isRunningOnGhActions())
v1beta1VolumeTests(t)
})
t.Run("v1beta2Tests", func(t *testing.T) {
skipTestOnCondition(t, isRunningOnGhActions())
v1beta2VolumeTests(t)
})
t.Run("v1beta3Tests", func(t *testing.T) {
skipTestOnCondition(t, isRunningOnGhActions())
v1beta3VolumeTests(t)
})
t.Run("v1Tests", func(t *testing.T) {
skipTestOnCondition(t, isRunningOnGhActions())
v1VolumeTests(t)
})
t.Run("v2alpha1Tests", func(t *testing.T) {
skipTestOnCondition(t, isRunningOnGhActions())
v2alpha1VolumeTests(t)
})
}
73 changes: 47 additions & 26 deletions pkg/os/volume/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,9 @@ func New() VolumeAPI {
}

func getVolumeSize(volumeID string) (int64, error) {
cmd := fmt.Sprintf("(Get-Volume -UniqueId \"%s\" | Get-partition).Size", volumeID)
out, err := utils.RunPowershellCmd(cmd)
cmd := `(Get-Volume -UniqueId "$Env:volumeID" | Get-partition).Size`
cmdEnv := fmt.Sprintf("volumeID=%s", volumeID)
out, err := utils.RunPowershellCmd(cmd, cmdEnv)

if err != nil || len(out) == 0 {
return -1, fmt.Errorf("error getting size of the partition from mount. cmd %s, output: %s, error: %v", cmd, string(out), err)
Expand Down Expand Up @@ -98,8 +99,9 @@ func (VolumeAPI) ListVolumesOnDisk(diskNumber uint32, partitionNumber uint32) (v

// FormatVolume - Formats a volume with the NTFS format.
func (VolumeAPI) FormatVolume(volumeID string) (err error) {
cmd := fmt.Sprintf("Get-Volume -UniqueId \"%s\" | Format-Volume -FileSystem ntfs -Confirm:$false", volumeID)
out, err := utils.RunPowershellCmd(cmd)
cmd := `Get-Volume -UniqueId "$Env:volumeID" | Format-Volume -FileSystem ntfs -Confirm:$false`
cmdEnv := fmt.Sprintf("volumeID=%s", volumeID)
out, err := utils.RunPowershellCmd(cmd, cmdEnv)
if err != nil {
return fmt.Errorf("error formatting volume. cmd: %s, output: %s, error: %v", cmd, string(out), err)
}
Expand All @@ -114,8 +116,9 @@ func (VolumeAPI) WriteVolumeCache(volumeID string) (err error) {

// IsVolumeFormatted - Check if the volume is formatted with the pre specified filesystem(typically ntfs).
func (VolumeAPI) IsVolumeFormatted(volumeID string) (bool, error) {
cmd := fmt.Sprintf("(Get-Volume -UniqueId \"%s\" -ErrorAction Stop).FileSystemType", volumeID)
out, err := utils.RunPowershellCmd(cmd)
cmd := `(Get-Volume -UniqueId "$Env:volumeID" -ErrorAction Stop).FileSystemType`
cmdEnv := fmt.Sprintf("volumeID=%s", volumeID)
out, err := utils.RunPowershellCmd(cmd, cmdEnv)
if err != nil {
return false, fmt.Errorf("error checking if volume is formatted. cmd: %s, output: %s, error: %v", cmd, string(out), err)
}
Expand All @@ -128,8 +131,12 @@ func (VolumeAPI) IsVolumeFormatted(volumeID string) (bool, error) {

// MountVolume - mounts a volume to a path. This is done using the Add-PartitionAccessPath for presenting the volume via a path.
func (VolumeAPI) MountVolume(volumeID, path string) error {
cmd := fmt.Sprintf("Get-Volume -UniqueId \"%s\" | Get-Partition | Add-PartitionAccessPath -AccessPath %s", volumeID, path)
out, err := utils.RunPowershellCmd(cmd)
cmd := `Get-Volume -UniqueId "$Env:volumeID" | Get-Partition | Add-PartitionAccessPath -AccessPath $Env:mountpath`
cmdEnv := []string{}
cmdEnv = append(cmdEnv, fmt.Sprintf("volumeID=%s", volumeID))
cmdEnv = append(cmdEnv, fmt.Sprintf("mountpath=%s", path))
out, err := utils.RunPowershellCmd(cmd, cmdEnv...)

if err != nil {
return fmt.Errorf("error mount volume to path. cmd: %s, output: %s, error: %v", cmd, string(out), err)
}
Expand All @@ -141,8 +148,13 @@ func (VolumeAPI) UnmountVolume(volumeID, path string) error {
if err := writeCache(volumeID); err != nil {
return err
}
cmd := fmt.Sprintf("Get-Volume -UniqueId \"%s\" | Get-Partition | Remove-PartitionAccessPath -AccessPath %s", volumeID, path)
out, err := utils.RunPowershellCmd(cmd)

cmd := `Get-Volume -UniqueId "$Env:volumeID" | Get-Partition | Remove-PartitionAccessPath -AccessPath $Env:mountpath`
cmdEnv := []string{}
cmdEnv = append(cmdEnv, fmt.Sprintf("volumeID=%s", volumeID))
cmdEnv = append(cmdEnv, fmt.Sprintf("mountpath=%s", path))
out, err := utils.RunPowershellCmd(cmd, cmdEnv...)

if err != nil {
return fmt.Errorf("error getting driver letter to mount volume. cmd: %s, output: %s,error: %v", cmd, string(out), err)
}
Expand All @@ -158,8 +170,9 @@ func (VolumeAPI) ResizeVolume(volumeID string, size int64) error {
var finalSize int64
var outString string
if size == 0 {
cmd = fmt.Sprintf("Get-Volume -UniqueId \"%s\" | Get-partition | Get-PartitionSupportedSize | Select SizeMax | ConvertTo-Json", volumeID)
out, err := utils.RunPowershellCmd(cmd)
cmd = `Get-Volume -UniqueId "$Env:volumeID" | Get-partition | Get-PartitionSupportedSize | Select SizeMax | ConvertTo-Json`
cmdEnv := fmt.Sprintf("volumeID=%s", volumeID)
out, err := utils.RunPowershellCmd(cmd, cmdEnv)

if err != nil || len(out) == 0 {
return fmt.Errorf("error getting sizemin,sizemax from mount. cmd: %s, output: %s, error: %v", cmd, string(out), err)
Expand Down Expand Up @@ -190,8 +203,10 @@ func (VolumeAPI) ResizeVolume(volumeID string, size int64) error {
return nil
}

cmd = fmt.Sprintf("Get-Volume -UniqueId \"%s\" | Get-Partition | Resize-Partition -Size %d", volumeID, finalSize)
out, err = utils.RunPowershellCmd(cmd)
cmd = fmt.Sprintf(`Get-Volume -UniqueId "$Env:volumeID" | Get-Partition | Resize-Partition -Size %d`, finalSize)
cmdEnv := []string{}
cmdEnv = append(cmdEnv, fmt.Sprintf("volumeID=%s", volumeID))
out, err = utils.RunPowershellCmd(cmd, cmdEnv...)
if err != nil {
return fmt.Errorf("error resizing volume. cmd: %s, output: %s size:%v, finalSize %v, error: %v", cmd, string(out), size, finalSize, err)
}
Expand All @@ -201,8 +216,9 @@ func (VolumeAPI) ResizeVolume(volumeID string, size int64) error {
// GetVolumeStats - retrieves the volume stats for a given volume
func (VolumeAPI) GetVolumeStats(volumeID string) (int64, int64, error) {
// get the size and sizeRemaining for the volume
cmd := fmt.Sprintf("(Get-Volume -UniqueId \"%s\" | Select SizeRemaining,Size) | ConvertTo-Json", volumeID)
out, err := utils.RunPowershellCmd(cmd)
cmd := `(Get-Volume -UniqueId "$Env:volumeID" | Select SizeRemaining,Size) | ConvertTo-Json`
cmdEnv := fmt.Sprintf("volumeID=%s", volumeID)
out, err := utils.RunPowershellCmd(cmd, cmdEnv)

if err != nil {
return -1, -1, fmt.Errorf("error getting capacity and used size of volume. cmd: %s, output: %s, error: %v", cmd, string(out), err)
Expand All @@ -227,8 +243,9 @@ func (VolumeAPI) GetVolumeStats(volumeID string) (int64, int64, error) {
// GetDiskNumberFromVolumeID - gets the disk number where the volume is.
func (VolumeAPI) GetDiskNumberFromVolumeID(volumeID string) (uint32, error) {
// get the size and sizeRemaining for the volume
cmd := fmt.Sprintf("(Get-Volume -UniqueId \"%s\" | Get-Partition).DiskNumber", volumeID)
out, err := utils.RunPowershellCmd(cmd)
cmd := `(Get-Volume -UniqueId "$Env:volumeID" | Get-Partition).DiskNumber`
cmdEnv := fmt.Sprintf("volumeID=%s", volumeID)
out, err := utils.RunPowershellCmd(cmd, cmdEnv)

if err != nil || len(out) == 0 {
return 0, fmt.Errorf("error getting disk number. cmd: %s, output: %s, error: %v", cmd, string(out), err)
Expand Down Expand Up @@ -261,8 +278,9 @@ func (VolumeAPI) GetVolumeIDFromTargetPath(mount string) (string, error) {
}

func getTarget(mount string) (string, error) {
cmd := fmt.Sprintf("(Get-Item -Path %s).Target", mount)
out, err := utils.RunPowershellCmd(cmd)
cmd := `(Get-Item -Path $Env:mountpath).Target`
cmdEnv := fmt.Sprintf("mountpath=%s", mount)
out, err := utils.RunPowershellCmd(cmd, cmdEnv)
if err != nil || len(out) == 0 {
return "", fmt.Errorf("error getting volume from mount. cmd: %s, output: %s, error: %v", cmd, string(out), err)
}
Expand Down Expand Up @@ -352,8 +370,9 @@ func ensureVolumePrefix(volume string) string {

// dereferenceSymlink dereferences the symlink `path` and returns the stdout.
func dereferenceSymlink(path string) (string, error) {
cmd := fmt.Sprintf(`(Get-Item -Path %s).Target`, path)
out, err := utils.RunPowershellCmd(cmd)
cmd := `(Get-Item -Path $Env:linkpath).Target`
cmdEnv := fmt.Sprintf("linkpath=%s", path)
out, err := utils.RunPowershellCmd(cmd, cmdEnv)
if err != nil {
return "", err
}
Expand All @@ -368,8 +387,9 @@ func getVolumeForDriveLetter(path string) (string, error) {
return "", fmt.Errorf("The path=%s is not a valid DriverLetter", path)
}

cmd := fmt.Sprintf(`(Get-Partition -DriveLetter %s | Get-Volume).UniqueId`, path)
out, err := utils.RunPowershellCmd(cmd)
cmd := `(Get-Partition -DriveLetter $Env:drivepath | Get-Volume).UniqueId`
cmdEnv := fmt.Sprintf("drivepath=%s", path)
out, err := utils.RunPowershellCmd(cmd, cmdEnv)
if err != nil {
return "", err
}
Expand All @@ -379,8 +399,9 @@ func getVolumeForDriveLetter(path string) (string, error) {
}

func writeCache(volumeID string) error {
cmd := fmt.Sprintf("Get-Volume -UniqueId \"%s\" | Write-Volumecache", volumeID)
out, err := utils.RunPowershellCmd(cmd)
cmd := `Get-Volume -UniqueId "$Env:volumeID" | Write-Volumecache`
cmdEnv := fmt.Sprintf("volumeID=%s", volumeID)
out, err := utils.RunPowershellCmd(cmd, cmdEnv)
if err != nil {
return fmt.Errorf("error writing volume cache. cmd: %s, output: %s, error: %v", cmd, string(out), err)
}
Expand Down

0 comments on commit f5aded6

Please sign in to comment.