[libvirt] [dbus PATCH 0/2] Add missing properties from LIBVIRT 0.0.3

Implemented the following properties: * virConnectGetVersion * virConnectNumOfDomains Katerina Koukiou (2): Add 'Version' property for virConnectGetVersion Add 'NumOfDomains' property for virConnectGetNumOfDomains data/org.libvirt.Connect.xml | 8 ++++++++ src/connect.c | 45 +++++++++++++++++++++++++++++++++++++++++++- test/test_connect.py | 9 +++++++++ 3 files changed, 61 insertions(+), 1 deletion(-) -- 2.15.0

--- data/org.libvirt.Connect.xml | 4 ++++ src/connect.c | 25 ++++++++++++++++++++++++- test/test_connect.py | 8 ++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/data/org.libvirt.Connect.xml b/data/org.libvirt.Connect.xml index e47c2f5..56a1126 100644 --- a/data/org.libvirt.Connect.xml +++ b/data/org.libvirt.Connect.xml @@ -3,6 +3,10 @@ <node name="/org/libvirt/connect"> <interface name="org.libvirt.Connect"> + <property name="Version" type="t" access="read"> + <annotation name="org.gtk.GDBus.DocString" + value="See https://libvirt.org/html/libvirt-libvirt-domain.html#virConnectGetVersion"/> + </property> <method name="ListDomains"> <annotation name="org.gtk.GDBus.DocString" value="See https://libvirt.org/html/libvirt-libvirt-domain.html#virConnectListAllDomains"/> diff --git a/src/connect.c b/src/connect.c index bf97cd5..8898e6d 100644 --- a/src/connect.c +++ b/src/connect.c @@ -80,6 +80,24 @@ virtDBusConnectOpen(virtDBusConnect *connect, return TRUE; } +static void +virtDBusConnectGetVersion(const gchar *objectPath G_GNUC_UNUSED, + gpointer userData, + GVariant **value, + GError **error) +{ + virtDBusConnect *connect = userData; + gulong hvVer; + + if (!virtDBusConnectOpen(connect, error)) + return; + + if (virConnectGetVersion(connect->connection, &hvVer) < 0) + return virtDBusUtilSetLastVirtError(error); + + *value = g_variant_new("t", hvVer); +} + static void virtDBusConnectListDomains(GVariant *inArgs, GUnixFDList *inFDs G_GNUC_UNUSED, @@ -177,6 +195,11 @@ virtDBusConnectDefineXML(GVariant *inArgs, *outArgs = g_variant_new("(o)", path); } +static virtDBusGDBusPropertyTable virtDBusConnectPropertyTable[] = { + { "Version", virtDBusConnectGetVersion, NULL }, + { NULL, NULL, NULL } +}; + static virtDBusGDBusMethodTable virtDBusConnectMethodTable[] = { { "ListDomains", virtDBusConnectListDomains }, { "CreateXML", virtDBusConnectCreateXML }, @@ -228,7 +251,7 @@ virtDBusConnectNew(virtDBusConnect **connectp, connect->connectPath, interfaceInfo, virtDBusConnectMethodTable, - NULL, + virtDBusConnectPropertyTable, connect); virtDBusDomainRegister(connect, error); diff --git a/test/test_connect.py b/test/test_connect.py index a52140c..02a7161 100755 --- a/test/test_connect.py +++ b/test/test_connect.py @@ -2,6 +2,7 @@ import dbus import libvirttest +import pytest class TestConnect(libvirttest.BaseTestClass): @@ -53,6 +54,13 @@ class TestConnect(libvirttest.BaseTestClass): self.main_loop() + @pytest.mark.parametrize("property_name,expected_type", [ + ("Version", dbus.UInt64), + ]) + def test_connect_properties_return_type(self, property_name, expected_type): + obj = self.bus.get_object('org.libvirt', '/org/libvirt/Test') + props = obj.GetAll('org.libvirt.Connect', dbus_interface=dbus.PROPERTIES_IFACE) + assert isinstance(props[property_name], expected_type) if __name__ == '__main__': libvirttest.run() -- 2.15.0

On Mon, 2018-03-26 at 16:58 +0200, Katerina Koukiou wrote:
--- data/org.libvirt.Connect.xml | 4 ++++ src/connect.c | 25 ++++++++++++++++++++++++- test/test_connect.py | 8 ++++++++ 3 files changed, 36 insertions(+), 1 deletion(-)
diff --git a/data/org.libvirt.Connect.xml b/data/org.libvirt.Connect.xml index e47c2f5..56a1126 100644 --- a/data/org.libvirt.Connect.xml +++ b/data/org.libvirt.Connect.xml @@ -3,6 +3,10 @@
<node name="/org/libvirt/connect"> <interface name="org.libvirt.Connect"> + <property name="Version" type="t" access="read"> + <annotation name="org.gtk.GDBus.DocString" + value="See https://libvirt.org/html/libvirt-libvirt-domain.h tml#virConnectGetVersion"/>; + </property> <method name="ListDomains"> <annotation name="org.gtk.GDBus.DocString" value="See https://libvirt.org/html/libvirt-libvirt-domain.h tml#virConnectListAllDomains"/>; diff --git a/src/connect.c b/src/connect.c index bf97cd5..8898e6d 100644 --- a/src/connect.c +++ b/src/connect.c @@ -80,6 +80,24 @@ virtDBusConnectOpen(virtDBusConnect *connect, return TRUE; }
+static void +virtDBusConnectGetVersion(const gchar *objectPath G_GNUC_UNUSED, + gpointer userData, + GVariant **value, + GError **error) +{ + virtDBusConnect *connect = userData; + gulong hvVer; + + if (!virtDBusConnectOpen(connect, error)) + return; + + if (virConnectGetVersion(connect->connection, &hvVer) < 0) + return virtDBusUtilSetLastVirtError(error); + + *value = g_variant_new("t", hvVer); +} + static void virtDBusConnectListDomains(GVariant *inArgs, GUnixFDList *inFDs G_GNUC_UNUSED, @@ -177,6 +195,11 @@ virtDBusConnectDefineXML(GVariant *inArgs, *outArgs = g_variant_new("(o)", path); }
+static virtDBusGDBusPropertyTable virtDBusConnectPropertyTable[] = { + { "Version", virtDBusConnectGetVersion, NULL }, + { NULL, NULL, NULL } +}; + static virtDBusGDBusMethodTable virtDBusConnectMethodTable[] = { { "ListDomains", virtDBusConnectListDomains }, { "CreateXML", virtDBusConnectCreateXML }, @@ -228,7 +251,7 @@ virtDBusConnectNew(virtDBusConnect **connectp, connect->connectPath, interfaceInfo, virtDBusConnectMethodTable, - NULL, + virtDBusConnectPropertyTable, connect);
virtDBusDomainRegister(connect, error); diff --git a/test/test_connect.py b/test/test_connect.py index a52140c..02a7161 100755 --- a/test/test_connect.py +++ b/test/test_connect.py @@ -2,6 +2,7 @@
import dbus import libvirttest +import pytest
class TestConnect(libvirttest.BaseTestClass): @@ -53,6 +54,13 @@ class TestConnect(libvirttest.BaseTestClass):
self.main_loop()
+ @pytest.mark.parametrize("property_name,expected_type", [ + ("Version", dbus.UInt64), Bad indentation. Will repost. + ]) + def test_connect_properties_return_type(self, property_name, expected_type): + obj = self.bus.get_object('org.libvirt', '/org/libvirt/Test') + props = obj.GetAll('org.libvirt.Connect', dbus_interface=dbus.PROPERTIES_IFACE) + assert isinstance(props[property_name], expected_type)
Should be two blank lines here.
if __name__ == '__main__': libvirttest.run()

--- data/org.libvirt.Connect.xml | 4 ++++ src/connect.c | 20 ++++++++++++++++++++ test/test_connect.py | 1 + 3 files changed, 25 insertions(+) diff --git a/data/org.libvirt.Connect.xml b/data/org.libvirt.Connect.xml index 56a1126..a58504d 100644 --- a/data/org.libvirt.Connect.xml +++ b/data/org.libvirt.Connect.xml @@ -7,6 +7,10 @@ <annotation name="org.gtk.GDBus.DocString" value="See https://libvirt.org/html/libvirt-libvirt-domain.html#virConnectGetVersion"/> </property> + <property name="NumOfDomains" type="u" access="read"> + <annotation name="org.gtk.GDBus.DocString" + value="See https://libvirt.org/html/libvirt-libvirt-domain.html#virConnectNumOfDomains"/> + </property> <method name="ListDomains"> <annotation name="org.gtk.GDBus.DocString" value="See https://libvirt.org/html/libvirt-libvirt-domain.html#virConnectListAllDomains"/> diff --git a/src/connect.c b/src/connect.c index 8898e6d..3f01dca 100644 --- a/src/connect.c +++ b/src/connect.c @@ -98,6 +98,25 @@ virtDBusConnectGetVersion(const gchar *objectPath G_GNUC_UNUSED, *value = g_variant_new("t", hvVer); } +static void +virtDBusConnectNumOfDomains(const gchar *objectPath G_GNUC_UNUSED, + gpointer userData, + GVariant **value, + GError **error) +{ + virtDBusConnect *connect = userData; + gint numdomains; + + if (!virtDBusConnectOpen(connect, error)) + return; + + numdomains = virConnectNumOfDomains(connect->connection); + if (numdomains < 0) + return virtDBusUtilSetLastVirtError(error); + + *value = g_variant_new("u", numdomains); +} + static void virtDBusConnectListDomains(GVariant *inArgs, GUnixFDList *inFDs G_GNUC_UNUSED, @@ -197,6 +216,7 @@ virtDBusConnectDefineXML(GVariant *inArgs, static virtDBusGDBusPropertyTable virtDBusConnectPropertyTable[] = { { "Version", virtDBusConnectGetVersion, NULL }, + { "NumOfDomains", virtDBusConnectNumOfDomains, NULL }, { NULL, NULL, NULL } }; diff --git a/test/test_connect.py b/test/test_connect.py index 02a7161..c40c677 100755 --- a/test/test_connect.py +++ b/test/test_connect.py @@ -56,6 +56,7 @@ class TestConnect(libvirttest.BaseTestClass): @pytest.mark.parametrize("property_name,expected_type", [ ("Version", dbus.UInt64), + ("NumOfDomains", dbus.UInt32), ]) def test_connect_properties_return_type(self, property_name, expected_type): obj = self.bus.get_object('org.libvirt', '/org/libvirt/Test') -- 2.15.0

On Mon, Mar 26, 2018 at 04:58:09PM +0200, Katerina Koukiou wrote:
--- data/org.libvirt.Connect.xml | 4 ++++ src/connect.c | 20 ++++++++++++++++++++ test/test_connect.py | 1 + 3 files changed, 25 insertions(+)
diff --git a/data/org.libvirt.Connect.xml b/data/org.libvirt.Connect.xml index 56a1126..a58504d 100644 --- a/data/org.libvirt.Connect.xml +++ b/data/org.libvirt.Connect.xml @@ -7,6 +7,10 @@ <annotation name="org.gtk.GDBus.DocString" value="See https://libvirt.org/html/libvirt-libvirt-domain.html#virConnectGetVersion"/> </property> + <property name="NumOfDomains" type="u" access="read"> + <annotation name="org.gtk.GDBus.DocString" + value="See https://libvirt.org/html/libvirt-libvirt-domain.html#virConnectNumOfDomains"/> + </property>
I'm not convinced this makes sense to expose. This is part of the old way, very inefficient way, of of listing guests. The new virConnectListAllDomains() method is much more efficient approach in general. Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|

On Mon, 2018-03-26 at 16:07 +0100, Daniel P. Berrangé wrote:
On Mon, Mar 26, 2018 at 04:58:09PM +0200, Katerina Koukiou wrote:
--- data/org.libvirt.Connect.xml | 4 ++++ src/connect.c | 20 ++++++++++++++++++++ test/test_connect.py | 1 + 3 files changed, 25 insertions(+)
diff --git a/data/org.libvirt.Connect.xml b/data/org.libvirt.Connect.xml index 56a1126..a58504d 100644 --- a/data/org.libvirt.Connect.xml +++ b/data/org.libvirt.Connect.xml @@ -7,6 +7,10 @@ <annotation name="org.gtk.GDBus.DocString" value="See https://libvirt.org/html/libvirt-libvirt-domain .html#virConnectGetVersion"/>; </property> + <property name="NumOfDomains" type="u" access="read"> + <annotation name="org.gtk.GDBus.DocString" + value="See https://libvirt.org/html/libvirt-libvirt-domain .html#virConnectNumOfDomains"/>; + </property>
I'm not convinced this makes sense to expose. This is part of the old way, very inefficient way, of of listing guests.
The new virConnectListAllDomains() method is much more efficient approach in general.
Thanks for pointing this out. I will remove the patch and I will not implement any other similar *ConnectNumOf* API in the future.
Regards, Daniel
Regards, Katerina
participants (2)
-
Daniel P. Berrangé
-
Katerina Koukiou