Re: [libvirt] [v10 2/6] add unit test to hostdev common library

2014-01-20 Thread Jim Fehlig
Chunyan Liu wrote:
> Add unit test for hostdev common library. Current tests are based on 
> virpcimock.
>
>   

[...]

> diff --git a/tests/virpcimock.c b/tests/virpcimock.c
> index 49759b0..5676db7 100644
> --- a/tests/virpcimock.c
> +++ b/tests/virpcimock.c
>   

Your can drop the changes to this file, since they were added by 508b566e.

Regards,
Jim

> @@ -149,7 +149,7 @@ static int pci_driver_handle_bind(const char *path);
>  static int pci_driver_handle_unbind(const char *path);
>  static int pci_driver_handle_new_id(const char *path);
>  static int pci_driver_handle_remove_id(const char *path);
> -
> +static int pci_handle_drivers_probe(const char *path);
>  
>  /*
>   * Helper functions
> @@ -585,6 +585,8 @@ pci_driver_handle_change(int fd ATTRIBUTE_UNUSED, const 
> char *path)
>  } else if (STREQ(file, "remove_id")) {
>  /* handle write to remove_id */
>  ret = pci_driver_handle_remove_id(path);
> +} else if (STREQ(file, "drivers_probe")) {
> +ret = pci_handle_drivers_probe(path);
>  } else {
>  /* yet not handled write */
>  ABORT("Not handled write to: %s", path);
> @@ -724,6 +726,16 @@ cleanup:
>  return ret;
>  }
>  
> +static int
> +pci_handle_drivers_probe(const char *path)
>   
> +{
> +struct pciDevice *dev = pci_device_find_by_content(path);
> +
> +if (pci_device_autobind(dev) < 0)
> +ABORT("Unable to do driver reprobe.");
> +
> +return 0;
> +}
>  
>  /*
>   * Functions to load the symbols and init the environment
> @@ -760,6 +772,9 @@ init_syms(void)
>  static void
>  init_env(void)
>  {
> +int fd = -1;
> +char *filepath;
> +
>  if (fakesysfsdir)
>  return;
>  
> @@ -791,6 +806,12 @@ init_env(void)
>  MAKE_PCI_DEVICE("0005:90:01.0", 0x1033, 0x0035);
>  MAKE_PCI_DEVICE("0005:90:01.1", 0x1033, 0x0035);
>  MAKE_PCI_DEVICE("0005:90:01.2", 0x1033, 0x00e0);
> +
> +/* make file drivers_probe */
> +if (virAsprintfQuiet(&filepath, "%s/drivers_probe", fakesysfsdir) < 0)
> +ABORT_OOM();
> +if ((fd = realopen(filepath, O_CREAT|O_WRONLY, 0200)) < 0)
> +ABORT("Unable to create: %s", filepath);
>  }
>  
>  
>   

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [v10 2/6] add unit test to hostdev common library

2014-01-16 Thread Chunyan Liu
Add unit test for hostdev common library. Current tests are based on virpcimock.

Signed-off-by: Chunyan Liu 
---
 tests/Makefile.am  |5 +
 tests/virhostdevtest.c |  473 
 tests/virpcimock.c |   23 +++-
 3 files changed, 500 insertions(+), 1 deletions(-)
 create mode 100644 tests/virhostdevtest.c

diff --git a/tests/Makefile.am b/tests/Makefile.am
index 568b7a0..3e66d8c 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -141,6 +141,7 @@ test_programs = virshtest sockettest \
 virportallocatortest \
sysinfotest \
virstoragetest \
+   virhostdevtest \
$(NULL)
 
 if WITH_REMOTE
@@ -754,6 +755,10 @@ vircgroupmock_la_CFLAGS = $(AM_CFLAGS)
 vircgroupmock_la_LDFLAGS = -module -avoid-version \
 -rpath /evil/libtool/hack/to/force/shared/lib/creation
 
+virhostdevtest_SOURCES = \
+   virhostdevtest.c testutils.h testutils.c
+virhostdevtest_LDADD = $(LDADDS)
+
 virpcitest_SOURCES = \
virpcitest.c testutils.h testutils.c
 virpcitest_LDADD = $(LDADDS)
diff --git a/tests/virhostdevtest.c b/tests/virhostdevtest.c
new file mode 100644
index 000..2dd9370
--- /dev/null
+++ b/tests/virhostdevtest.c
@@ -0,0 +1,473 @@
+/*
+ * Copyright (C) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library.  If not, see
+ * .
+ *
+ * Author: Chunyan Liu 
+ */
+
+#include 
+
+#include "testutils.h"
+
+#ifdef __linux__
+
+# include 
+# include 
+# include 
+# include 
+# include 
+# include "virlog.h"
+# include "virhostdev.h"
+
+# define VIR_FROM_THIS VIR_FROM_NONE
+
+# define CHECK_LIST_COUNT(list, cnt)\
+if ((count = virPCIDeviceListCount(list)) != cnt) { \
+virReportError(VIR_ERR_INTERNAL_ERROR,  \
+   "Unexpected count of items in " #list ": %d, "   \
+   "expecting %zu", count, (size_t) cnt);   \
+goto cleanup;   \
+}
+
+# define TEST_STATE_DIR abs_builddir "/hostdevmgr"
+static const char *drv_name = "test_driver";
+static const char *dom_name = "test_domain";
+static const unsigned char *uuid =
+(unsigned char *)("f92360b0-2541-8791-fb32-d1f838811541");
+static int nhostdevs = 3;
+static virDomainHostdevDefPtr hostdevs[] = {NULL, NULL, NULL};
+static virPCIDevicePtr dev[] = {NULL, NULL, NULL};
+static virHostdevManagerPtr mgr = NULL;
+
+static void
+myCleanup(void)
+{
+size_t i;
+for (i = 0; i < nhostdevs; i++) {
+ virPCIDeviceFree(dev[i]);
+ virDomainHostdevDefFree(hostdevs[i]);
+}
+
+if (mgr) {
+virObjectUnref(mgr->activePciHostdevs);
+virObjectUnref(mgr->inactivePciHostdevs);
+virObjectUnref(mgr->activeUsbHostdevs);
+VIR_FREE(mgr->stateDir);
+VIR_FREE(mgr);
+}
+}
+
+static int
+myInit(void)
+{
+size_t i;
+
+for (i = 0; i < nhostdevs; i++) {
+virDomainHostdevSubsys subsys;
+hostdevs[i] = virDomainHostdevDefAlloc();
+if (!hostdevs[i])
+goto cleanup;
+hostdevs[i]->mode = VIR_DOMAIN_HOSTDEV_MODE_SUBSYS;
+subsys.type = VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI;
+subsys.u.pci.addr.domain = 0;
+subsys.u.pci.addr.bus = 0;
+subsys.u.pci.addr.slot = i + 1;
+subsys.u.pci.addr.function = 0;
+subsys.u.pci.backend = VIR_DOMAIN_HOSTDEV_PCI_BACKEND_KVM;
+hostdevs[i]->source.subsys = subsys;
+}
+
+for (i = 0; i < nhostdevs; i++) {
+if (!(dev[i] = virPCIDeviceNew(0, 0, i + 1, 0)) ||
+virPCIDeviceSetStubDriver(dev[i], "pci-stub") < 0)
+goto cleanup;
+}
+
+if (VIR_ALLOC(mgr) < 0)
+goto cleanup;
+if ((mgr->activePciHostdevs = virPCIDeviceListNew()) == NULL)
+goto cleanup;
+if ((mgr->activeUsbHostdevs = virUSBDeviceListNew()) == NULL)
+goto cleanup;
+if ((mgr->inactivePciHostdevs = virPCIDeviceListNew()) == NULL)
+goto cleanup;
+if ((mgr->activeScsiHostdevs = virSCSIDeviceListNew()) == NULL)
+goto cleanup;
+if (VIR_STRDUP(mgr->stateDir, TEST_STATE_DIR) < 0)
+goto cleanup;
+if (virFileMakePath(mgr->stateDir) < 0)
+goto cleanup;
+
+return 0;
+
+cleanup:
+myCleanup();