@@ -34,6 +34,7 @@ func TestDiscovererFromCSVFiles(t *testing.T) {
3434 testCases := []struct {
3535 description string
3636 moutSpecs map [csv.MountSpecType ][]string
37+ ignorePatterns []string
3738 symlinkLocator lookup.Locator
3839 symlinkChainLocator lookup.Locator
3940 symlinkResolver func (string ) (string , error )
@@ -99,6 +100,86 @@ func TestDiscovererFromCSVFiles(t *testing.T) {
99100 },
100101 },
101102 },
103+ {
104+ // TODO: This current resolves to two mounts that are the same.
105+ // These are deduplicated at a later stage. We could consider deduplicating earlier in the pipeline.
106+ description : "single glob filter does not remove symlink mounts" ,
107+ moutSpecs : map [csv.MountSpecType ][]string {
108+ "lib" : {"/usr/lib/aarch64-linux-gnu/tegra/libv4l2_nvargus.so" },
109+ "sym" : {"/usr/lib/aarch64-linux-gnu/libv4l/plugins/nv/libv4l2_nvargus.so" },
110+ },
111+ ignorePatterns : []string {"*.so" },
112+ symlinkLocator : & lookup.LocatorMock {
113+ LocateFunc : func (path string ) ([]string , error ) {
114+ if path == "/usr/lib/aarch64-linux-gnu/libv4l/plugins/nv/libv4l2_nvargus.so" {
115+ return []string {"/usr/lib/aarch64-linux-gnu/tegra/libv4l2_nvargus.so" }, nil
116+ }
117+ return []string {path }, nil
118+ },
119+ },
120+ symlinkChainLocator : & lookup.LocatorMock {
121+ LocateFunc : func (path string ) ([]string , error ) {
122+ if path == "/usr/lib/aarch64-linux-gnu/libv4l/plugins/nv/libv4l2_nvargus.so" {
123+ return []string {"/usr/lib/aarch64-linux-gnu/libv4l/plugins/nv/libv4l2_nvargus.so" , "/usr/lib/aarch64-linux-gnu/tegra/libv4l2_nvargus.so" }, nil
124+ }
125+ return nil , fmt .Errorf ("Unexpected path: %v" , path )
126+ },
127+ },
128+ symlinkResolver : func (path string ) (string , error ) {
129+ if path == "/usr/lib/aarch64-linux-gnu/libv4l/plugins/nv/libv4l2_nvargus.so" {
130+ return "/usr/lib/aarch64-linux-gnu/tegra/libv4l2_nvargus.so" , nil
131+ }
132+ return path , nil
133+ },
134+ expectedMounts : []discover.Mount {
135+ {
136+ Path : "/usr/lib/aarch64-linux-gnu/tegra/libv4l2_nvargus.so" ,
137+ HostPath : "/usr/lib/aarch64-linux-gnu/tegra/libv4l2_nvargus.so" ,
138+ Options : []string {"ro" , "nosuid" , "nodev" , "bind" },
139+ },
140+ {
141+ Path : "/usr/lib/aarch64-linux-gnu/tegra/libv4l2_nvargus.so" ,
142+ HostPath : "/usr/lib/aarch64-linux-gnu/tegra/libv4l2_nvargus.so" ,
143+ Options : []string {"ro" , "nosuid" , "nodev" , "bind" },
144+ },
145+ },
146+ expectedHooks : []discover.Hook {
147+ {
148+ Lifecycle : "createContainer" ,
149+ Path : "/usr/bin/nvidia-ctk" ,
150+ Args : []string {
151+ "nvidia-ctk" ,
152+ "hook" ,
153+ "create-symlinks" ,
154+ "--link" ,
155+ "/usr/lib/aarch64-linux-gnu/tegra/libv4l2_nvargus.so::/usr/lib/aarch64-linux-gnu/libv4l/plugins/nv/libv4l2_nvargus.so" ,
156+ },
157+ },
158+ },
159+ },
160+ {
161+ description : "** filter removes symlink mounts" ,
162+ moutSpecs : map [csv.MountSpecType ][]string {
163+ "lib" : {"/usr/lib/aarch64-linux-gnu/tegra/libv4l2_nvargus.so" },
164+ "sym" : {"/usr/lib/aarch64-linux-gnu/libv4l/plugins/nv/libv4l2_nvargus.so" },
165+ },
166+ symlinkLocator : & lookup.LocatorMock {
167+ LocateFunc : func (path string ) ([]string , error ) {
168+ if path == "/usr/lib/aarch64-linux-gnu/libv4l/plugins/nv/libv4l2_nvargus.so" {
169+ return []string {"/usr/lib/aarch64-linux-gnu/tegra/libv4l2_nvargus.so" }, nil
170+ }
171+ return []string {path }, nil
172+ },
173+ },
174+ ignorePatterns : []string {"**/*.so" },
175+ expectedMounts : []discover.Mount {
176+ {
177+ Path : "/usr/lib/aarch64-linux-gnu/tegra/libv4l2_nvargus.so" ,
178+ HostPath : "/usr/lib/aarch64-linux-gnu/tegra/libv4l2_nvargus.so" ,
179+ Options : []string {"ro" , "nosuid" , "nodev" , "bind" },
180+ },
181+ },
182+ },
102183 }
103184
104185 for _ , tc := range testCases {
@@ -109,6 +190,7 @@ func TestDiscovererFromCSVFiles(t *testing.T) {
109190 logger : logger ,
110191 nvidiaCTKPath : "/usr/bin/nvidia-ctk" ,
111192 csvFiles : []string {"dummy" },
193+ ignorePatterns : tc .ignorePatterns ,
112194 symlinkLocator : tc .symlinkLocator ,
113195 symlinkChainLocator : tc .symlinkChainLocator ,
114196 resolveSymlink : tc .symlinkResolver ,
0 commit comments