@@ -10,6 +10,7 @@ import (
1010 "syscall"
1111 "testing"
1212
13+ "github.com/docker/docker/pkg/stringid"
1314 "github.com/opencontainers/go-digest"
1415)
1516
@@ -102,3 +103,50 @@ func TestStartTransactionFailure(t *testing.T) {
102103 t .Fatal (err )
103104 }
104105}
106+
107+ func TestGetOrphan (t * testing.T ) {
108+ fms , td , cleanup := newFileMetadataStore (t )
109+ defer cleanup ()
110+
111+ layerRoot := filepath .Join (td , "sha256" )
112+ if err := os .MkdirAll (layerRoot , 0755 ); err != nil {
113+ t .Fatal (err )
114+ }
115+
116+ tx , err := fms .StartTransaction ()
117+ if err != nil {
118+ t .Fatal (err )
119+ }
120+
121+ layerid := randomLayerID (5 )
122+ err = tx .Commit (layerid )
123+ if err != nil {
124+ t .Fatal (err )
125+ }
126+ layerPath := fms .getLayerDirectory (layerid )
127+ if err := ioutil .WriteFile (filepath .Join (layerPath , "cache-id" ), []byte (stringid .GenerateRandomID ()), 0644 ); err != nil {
128+ t .Fatal (err )
129+ }
130+
131+ orphanLayers , err := fms .getOrphan ()
132+ if err != nil {
133+ t .Fatal (err )
134+ }
135+ if len (orphanLayers ) != 0 {
136+ t .Fatalf ("Expected to have zero orphan layers" )
137+ }
138+
139+ layeridSplit := strings .Split (layerid .String (), ":" )
140+ newPath := filepath .Join (layerRoot , fmt .Sprintf ("%s-%s-removing" , layeridSplit [1 ], stringid .GenerateRandomID ()))
141+ err = os .Rename (layerPath , newPath )
142+ if err != nil {
143+ t .Fatal (err )
144+ }
145+ orphanLayers , err = fms .getOrphan ()
146+ if err != nil {
147+ t .Fatal (err )
148+ }
149+ if len (orphanLayers ) != 1 {
150+ t .Fatalf ("Expected to have one orphan layer" )
151+ }
152+ }
0 commit comments