@@ -135,6 +135,35 @@ var _ = Describe("DesiredLRPDB", func() {
135135 expectedDesiredLRPs = append (expectedDesiredLRPs , model_helpers .NewValidDesiredLRP ("d-1" ))
136136 expectedDesiredLRPs = append (expectedDesiredLRPs , model_helpers .NewValidDesiredLRP ("d-2" ))
137137 expectedDesiredLRPs = append (expectedDesiredLRPs , model_helpers .NewValidDesiredLRP ("d-3" ))
138+ // Create LRP with multiple volume mounts (one matching, one not)
139+ expectedDesiredLRPs [1 ].VolumeMounts = []* models.VolumeMount {
140+ {
141+ Driver : "other-driver" ,
142+ ContainerDir : "/mnt/other" ,
143+ Mode : "r" ,
144+ Shared : & models.SharedDevice {
145+ VolumeId : "vol-id-3" ,
146+ },
147+ },
148+ {
149+ Driver : "test-driver" ,
150+ ContainerDir : "/mnt/test2" ,
151+ Mode : "rw" ,
152+ Shared : & models.SharedDevice {
153+ VolumeId : "vol-id-4" ,
154+ },
155+ },
156+ {
157+ Driver : "third-driver" ,
158+ ContainerDir : "/mnt/third" ,
159+ Mode : "r" ,
160+ Shared : & models.SharedDevice {
161+ VolumeId : "vol-id-5" ,
162+ },
163+ },
164+ }
165+ // Create LRP with no volume mounts
166+ expectedDesiredLRPs [2 ].VolumeMounts = []* models.VolumeMount {}
138167 for i , expectedDesiredLRP := range expectedDesiredLRPs {
139168 expectedDesiredLRP .Domain = fmt .Sprintf ("domain-%d" , i + 1 )
140169 Expect (sqlDB .DesireLRP (ctx , logger , expectedDesiredLRP )).To (Succeed ())
@@ -218,6 +247,57 @@ var _ = Describe("DesiredLRPDB", func() {
218247 })
219248 })
220249
250+ Context ("when filtering by volume mount driver" , func () {
251+ FIt ("returns LRPs that have a volume mount with matching driver" , func () {
252+ desiredLRPs , err := sqlDB .DesiredLRPs (ctx , logger , models.DesiredLRPFilter {VolumeMountDriver : "my-driver" })
253+ Expect (err ).NotTo (HaveOccurred ())
254+
255+ Expect (desiredLRPs ).To (HaveLen (1 ))
256+ processGuids := []string {desiredLRPs [0 ].ProcessGuid }
257+ Expect (processGuids ).To (ContainElements ("d-1" ))
258+ })
259+
260+ FIt ("finds LRPs with matching driver among multiple volume mounts" , func () {
261+ desiredLRPs , err := sqlDB .DesiredLRPs (ctx , logger , models.DesiredLRPFilter {VolumeMountDriver : "third-driver" })
262+ Expect (err ).NotTo (HaveOccurred ())
263+
264+ Expect (desiredLRPs ).To (HaveLen (1 ))
265+ Expect (desiredLRPs [0 ].ProcessGuid ).To (Equal ("d-2" ))
266+ Expect (desiredLRPs [0 ].VolumeMounts ).To (HaveLen (3 ))
267+ })
268+
269+ It ("returns empty list when no LRPs have matching volume mount driver" , func () {
270+ desiredLRPs , err := sqlDB .DesiredLRPs (ctx , logger , models.DesiredLRPFilter {VolumeMountDriver : "non-existent-driver" })
271+ Expect (err ).NotTo (HaveOccurred ())
272+
273+ Expect (desiredLRPs ).To (HaveLen (0 ))
274+ })
275+
276+ It ("excludes LRPs with no volume mounts" , func () {
277+ desiredLRPs , err := sqlDB .DesiredLRPs (ctx , logger , models.DesiredLRPFilter {VolumeMountDriver : "test-driver" })
278+ Expect (err ).NotTo (HaveOccurred ())
279+
280+ processGuids := make ([]string , len (desiredLRPs ))
281+ for i , lrp := range desiredLRPs {
282+ processGuids [i ] = lrp .ProcessGuid
283+ }
284+ Expect (processGuids ).NotTo (ContainElement ("d-3" ))
285+ })
286+
287+ It ("can combine volume mount driver filter with domain filter" , func () {
288+ desiredLRPs , err := sqlDB .DesiredLRPs (ctx , logger , models.DesiredLRPFilter {
289+ Domain : "domain-1" ,
290+ VolumeMountDriver : "my-driver" ,
291+ })
292+ Expect (err ).NotTo (HaveOccurred ())
293+
294+ Expect (desiredLRPs ).To (HaveLen (1 ))
295+ for _ , lrp := range desiredLRPs {
296+ Expect (lrp .Domain ).To (Equal ("domain-1" ))
297+ }
298+ })
299+ })
300+
221301 Context ("when the run info is invalid" , func () {
222302 BeforeEach (func () {
223303 queryStr := "UPDATE desired_lrps SET run_info = ? WHERE process_guid = ?"
0 commit comments