@@ -12,6 +12,36 @@ import (
1212 "github.com/NVIDIA/nvidia-container-toolkit/internal/lookup/symlinks"
1313)
1414
15+ func TestDoesLinkExist (t * testing.T ) {
16+ tmpDir := t .TempDir ()
17+
18+ require .NoError (
19+ t ,
20+ makeFs (tmpDir ,
21+ dirOrLink {path : "/a/b/c" , target : "d" },
22+ dirOrLink {path : "/a/b/e" , target : "/a/b/f" },
23+ ),
24+ )
25+
26+ exists , err := doesLinkExist ("d" , filepath .Join (tmpDir , "/a/b/c" ))
27+ require .NoError (t , err )
28+ require .True (t , exists )
29+
30+ exists , err = doesLinkExist ("/a/b/f" , filepath .Join (tmpDir , "/a/b/e" ))
31+ require .NoError (t , err )
32+ require .True (t , exists )
33+
34+ _ , err = doesLinkExist ("different-target" , filepath .Join (tmpDir , "/a/b/c" ))
35+ require .Error (t , err )
36+
37+ _ , err = doesLinkExist ("/a/b/d" , filepath .Join (tmpDir , "/a/b/c" ))
38+ require .Error (t , err )
39+
40+ exists , err = doesLinkExist ("foo" , filepath .Join (tmpDir , "/a/b/does-not-exist" ))
41+ require .NoError (t , err )
42+ require .False (t , exists )
43+ }
44+
1545func TestCreateLinkRelativePath (t * testing.T ) {
1646 tmpDir := t .TempDir ()
1747 hostRoot := filepath .Join (tmpDir , "/host-root/" )
@@ -56,12 +86,28 @@ func TestCreateLinkAlreadyExists(t *testing.T) {
5686
5787 // nvidia-cdi-hook create-symlinks --link libfoo.so.1::/lib/libfoo.so
5888 err := getTestCommand ().createLink (containerRoot , "libfoo.so.1" , "/lib/libfoo.so" )
59- require .Error (t , err )
89+ require .NoError (t , err )
6090 target , err := symlinks .Resolve (filepath .Join (containerRoot , "lib/libfoo.so" ))
6191 require .NoError (t , err )
6292 require .Equal (t , "libfoo.so.1" , target )
6393}
6494
95+ func TestCreateLinkAlreadyExistsDifferentTarget (t * testing.T ) {
96+ tmpDir := t .TempDir ()
97+ hostRoot := filepath .Join (tmpDir , "/host-root/" )
98+ containerRoot := filepath .Join (tmpDir , "/container-root" )
99+
100+ require .NoError (t , makeFs (hostRoot ))
101+ require .NoError (t , makeFs (containerRoot , dirOrLink {path : "/lib/libfoo.so" , target : "different-target" }))
102+
103+ // nvidia-cdi-hook create-symlinks --link libfoo.so.1::/lib/libfoo.so
104+ err := getTestCommand ().createLink (containerRoot , "libfoo.so.1" , "/lib/libfoo.so" )
105+ require .Error (t , err )
106+ target , err := symlinks .Resolve (filepath .Join (containerRoot , "lib/libfoo.so" ))
107+ require .NoError (t , err )
108+ require .Equal (t , "different-target" , target )
109+ }
110+
65111type dirOrLink struct {
66112 path string
67113 target string
0 commit comments