@@ -84,6 +84,51 @@ func TestMain(m *testing.M) {
84
84
os .Exit (m .Run ())
85
85
}
86
86
87
+ func TestIsShadowCopy (t * testing.T ) {
88
+ if len (vssadminList ) == 0 {
89
+ t .Skip ("no existing shadow copies" )
90
+ }
91
+ sc := vssadminList [0 ]
92
+ tmp , err := os .MkdirTemp ("" , "go-vss." )
93
+ require .NoError (t , err )
94
+ defer os .Remove (tmp )
95
+
96
+ link := filepath .Join (tmp , "link" )
97
+ require .NoError (t , sc .Link (link ))
98
+ defer func () {
99
+ if _ , err := os .Lstat (link ); err == nil {
100
+ _ = rmdir (link )
101
+ }
102
+ }()
103
+
104
+ if ok , err := IsShadowCopy (tmp ); assert .NoError (t , err ) {
105
+ assert .False (t , ok )
106
+ }
107
+ if ok , err := IsShadowCopy (sc .DeviceObject ); assert .NoError (t , err ) {
108
+ assert .True (t , ok )
109
+ }
110
+ if ok , err := IsShadowCopy (link ); assert .NoError (t , err ) {
111
+ assert .True (t , ok )
112
+ }
113
+ if have , err := Get (link ); assert .NoError (t , err ) {
114
+ if have .InstallDate .Sub (sc .InstallDate ).Abs () < time .Second {
115
+ have .InstallDate = sc .InstallDate
116
+ }
117
+ assert .Equal (t , sc , have )
118
+ }
119
+ if all , err := os .ReadDir (link ); assert .NoError (t , err ) && len (all ) > 0 {
120
+ file := filepath .Join (link , all [0 ].Name ())
121
+ if ok , err := IsShadowCopy (file ); assert .NoError (t , err ) {
122
+ assert .True (t , ok )
123
+ }
124
+ file = filepath .Join (sc .DeviceObject , all [0 ].Name ())
125
+ if ok , err := IsShadowCopy (file ); assert .NoError (t , err ) {
126
+ assert .True (t , ok )
127
+ }
128
+ }
129
+ assert .NoError (t , rmdir (link ))
130
+ }
131
+
87
132
func TestSplitVol (t * testing.T ) {
88
133
_ , _ , err := SplitVolume (`.` )
89
134
assert .Error (t , err )
0 commit comments