test API: allow passing resource requirements

For all those API functions that directly use reserved_resources.get(), add a
'specifics' argument to be able to pick specific resources. For example, this
allows to pick a suite.bts(specifics={'type': 'osmo-bts-sysmo'})

I needed this to test error reporting for over-using resources, but will most
probably make sense in the future.

Change-Id: If6f175f4bb53dec5306fb3c6479202a7bf1c7116
diff --git a/src/osmo_gsm_tester/suite.py b/src/osmo_gsm_tester/suite.py
index b88b8b2..fb6cf36 100644
--- a/src/osmo_gsm_tester/suite.py
+++ b/src/osmo_gsm_tester/suite.py
@@ -286,8 +286,8 @@
             return
         self.reserved_resources.free()
 
-    def ip_address(self):
-        return self.reserved_resources.get(resource.R_IP_ADDRESS)
+    def ip_address(self, specifics=None):
+        return self.reserved_resources.get(resource.R_IP_ADDRESS, specifics=specifics)
 
     def nitb(self, ip_address=None):
         if ip_address is None:
@@ -314,11 +314,11 @@
             ip_address = self.ip_address()
         return osmo_bsc.OsmoBsc(self, msc, ip_address)
 
-    def bts(self):
-        return bts_obj(self, self.reserved_resources.get(resource.R_BTS))
+    def bts(self, specifics=None):
+        return bts_obj(self, self.reserved_resources.get(resource.R_BTS, specifics=specifics))
 
-    def modem(self):
-        conf = self.reserved_resources.get(resource.R_MODEM)
+    def modem(self, specifics=None):
+        conf = self.reserved_resources.get(resource.R_MODEM, specifics=specifics)
         self.dbg('create Modem object', conf=conf)
         modem = ofono_client.Modem(conf)
         self.register_for_cleanup(modem)