@@ -1516,11 +1516,23 @@ func TestChmodIfPermissionMismatch(t *testing.T) {
1516
1516
_ = os .MkdirAll (permissionMismatchPath , os .FileMode (0721 ))
1517
1517
defer os .RemoveAll (permissionMismatchPath )
1518
1518
1519
+ permissionMatchGidMismatchPath , _ := getWorkDirPath ("permissionMatchGidMismatchPath" )
1520
+ _ = os .MkdirAll (permissionMatchGidMismatchPath , os .FileMode (0755 ))
1521
+ _ = os .Chmod (permissionMatchGidMismatchPath , 0755 | os .ModeSetgid ) // Setgid bit is set
1522
+ defer os .RemoveAll (permissionMatchGidMismatchPath )
1523
+
1524
+ permissionMismatchGidMismatch , _ := getWorkDirPath ("permissionMismatchGidMismatch" )
1525
+ _ = os .MkdirAll (permissionMismatchGidMismatch , os .FileMode (0721 ))
1526
+ _ = os .Chmod (permissionMismatchGidMismatch , 0721 | os .ModeSetgid ) // Setgid bit is set
1527
+ defer os .RemoveAll (permissionMismatchGidMismatch )
1528
+
1519
1529
tests := []struct {
1520
- desc string
1521
- path string
1522
- mode os.FileMode
1523
- expectedError error
1530
+ desc string
1531
+ path string
1532
+ mode os.FileMode
1533
+ expectedPerms os.FileMode
1534
+ expectedGidBit bool
1535
+ expectedError error
1524
1536
}{
1525
1537
{
1526
1538
desc : "Invalid path" ,
@@ -1529,16 +1541,52 @@ func TestChmodIfPermissionMismatch(t *testing.T) {
1529
1541
expectedError : fmt .Errorf ("CreateFile invalid-path: The system cannot find the file specified" ),
1530
1542
},
1531
1543
{
1532
- desc : "permission matching path" ,
1533
- path : permissionMatchingPath ,
1534
- mode : 0755 ,
1535
- expectedError : nil ,
1544
+ desc : "permission matching path" ,
1545
+ path : permissionMatchingPath ,
1546
+ mode : 0755 ,
1547
+ expectedPerms : 0755 ,
1548
+ expectedGidBit : false ,
1549
+ expectedError : nil ,
1536
1550
},
1537
1551
{
1538
- desc : "permission mismatch path" ,
1539
- path : permissionMismatchPath ,
1540
- mode : 0755 ,
1541
- expectedError : nil ,
1552
+ desc : "permission mismatch path" ,
1553
+ path : permissionMismatchPath ,
1554
+ mode : 0755 ,
1555
+ expectedPerms : 0755 ,
1556
+ expectedGidBit : false ,
1557
+ expectedError : nil ,
1558
+ },
1559
+ {
1560
+ desc : "permission mismatch path" ,
1561
+ path : permissionMismatchPath ,
1562
+ mode : 0755 ,
1563
+ expectedPerms : 0755 ,
1564
+ expectedGidBit : false ,
1565
+ expectedError : nil ,
1566
+ },
1567
+ {
1568
+ desc : "only match the permission mode bits" ,
1569
+ path : permissionMatchGidMismatchPath ,
1570
+ mode : 0755 ,
1571
+ expectedPerms : 0755 ,
1572
+ expectedGidBit : true ,
1573
+ expectedError : nil ,
1574
+ },
1575
+ {
1576
+ desc : "only change the permission mode bits when gid is set" ,
1577
+ path : permissionMismatchGidMismatch ,
1578
+ mode : 0755 ,
1579
+ expectedPerms : 0755 ,
1580
+ expectedGidBit : true ,
1581
+ expectedError : nil ,
1582
+ },
1583
+ {
1584
+ desc : "only change the permission mode bits when gid is not set but mode bits have gid set" ,
1585
+ path : permissionMismatchPath ,
1586
+ mode : 02755 ,
1587
+ expectedPerms : 0755 ,
1588
+ expectedGidBit : false ,
1589
+ expectedError : nil ,
1542
1590
},
1543
1591
}
1544
1592
@@ -1549,7 +1597,19 @@ func TestChmodIfPermissionMismatch(t *testing.T) {
1549
1597
t .Errorf ("test[%s]: unexpected error: %v, expected error: %v" , test .desc , err , test .expectedError )
1550
1598
}
1551
1599
}
1600
+
1601
+ if test .expectedError == nil {
1602
+ info , _ := os .Lstat (test .path )
1603
+ if test .expectedError == nil && (info .Mode ()& os .ModePerm != test .expectedPerms ) {
1604
+ t .Errorf ("test[%s]: unexpected perms: %v, expected perms: %v, " , test .desc , info .Mode ()& os .ModePerm , test .expectedPerms )
1605
+ }
1606
+
1607
+ if (info .Mode ()& os .ModeSetgid != 0 ) != test .expectedGidBit {
1608
+ t .Errorf ("test[%s]: unexpected gid bit: %v, expected gid bit: %v" , test .desc , info .Mode ()& os .ModeSetgid != 0 , test .expectedGidBit )
1609
+ }
1610
+ }
1552
1611
}
1612
+
1553
1613
}
1554
1614
1555
1615
// getWorkDirPath returns the path to the current working directory
0 commit comments