mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-10-30 09:53:10 +00:00
12be42ee7e
We already allow users to provide TFTP root path in network XML and not specify any DHCP. This makes sense, because dnsmasq is not only DHCP server but also TFTP server and users might have a DHCP server configured on their own, outside of libvirt's control and want just the TFTP part. By moving TFTP config generator out of DHCP generator and calling it for every IPv4 range, users can finally enable just TFTP. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2026765 Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
170 lines
5.2 KiB
C
170 lines
5.2 KiB
C
#include <config.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
#include <sys/types.h>
|
|
#include <fcntl.h>
|
|
|
|
#include "internal.h"
|
|
#include "testutils.h"
|
|
#include "network_conf.h"
|
|
#include "testutilsqemu.h"
|
|
#include "virstring.h"
|
|
#include "network/bridge_driver.h"
|
|
|
|
#define VIR_FROM_THIS VIR_FROM_NONE
|
|
|
|
typedef enum {
|
|
TEST_COMPARE_NET_XML2XML_RESULT_SUCCESS,
|
|
TEST_COMPARE_NET_XML2XML_RESULT_FAIL_PARSE,
|
|
TEST_COMPARE_NET_XML2XML_RESULT_FAIL_FORMAT,
|
|
TEST_COMPARE_NET_XML2XML_RESULT_FAIL_COMPARE,
|
|
} testCompareNetXML2XMLResult;
|
|
|
|
static int
|
|
testCompareXMLToXMLFiles(const char *inxml, const char *outxml,
|
|
unsigned int flags,
|
|
testCompareNetXML2XMLResult expectResult)
|
|
{
|
|
g_autofree char *actual = NULL;
|
|
int ret;
|
|
testCompareNetXML2XMLResult result = TEST_COMPARE_NET_XML2XML_RESULT_SUCCESS;
|
|
virNetworkDef *dev = NULL;
|
|
g_autoptr(virNetworkXMLOption) xmlopt = NULL;
|
|
|
|
if (!(xmlopt = networkDnsmasqCreateXMLConf()))
|
|
goto cleanup;
|
|
|
|
if (!(dev = virNetworkDefParseFile(inxml, xmlopt))) {
|
|
result = TEST_COMPARE_NET_XML2XML_RESULT_FAIL_PARSE;
|
|
goto cleanup;
|
|
}
|
|
if (expectResult == TEST_COMPARE_NET_XML2XML_RESULT_FAIL_PARSE)
|
|
goto cleanup;
|
|
|
|
if (!(actual = virNetworkDefFormat(dev, xmlopt, flags))) {
|
|
result = TEST_COMPARE_NET_XML2XML_RESULT_FAIL_FORMAT;
|
|
goto cleanup;
|
|
}
|
|
if (expectResult == TEST_COMPARE_NET_XML2XML_RESULT_FAIL_FORMAT)
|
|
goto cleanup;
|
|
|
|
if (virTestCompareToFile(actual, outxml) < 0) {
|
|
result = TEST_COMPARE_NET_XML2XML_RESULT_FAIL_COMPARE;
|
|
goto cleanup;
|
|
}
|
|
if (expectResult == TEST_COMPARE_NET_XML2XML_RESULT_FAIL_COMPARE)
|
|
goto cleanup;
|
|
|
|
cleanup:
|
|
if (result == expectResult) {
|
|
ret = 0;
|
|
if (expectResult != TEST_COMPARE_NET_XML2XML_RESULT_SUCCESS) {
|
|
VIR_TEST_DEBUG("Got expected failure code=%d msg=%s",
|
|
result, virGetLastErrorMessage());
|
|
}
|
|
} else {
|
|
ret = -1;
|
|
VIR_TEST_DEBUG("Expected result code=%d but received code=%d",
|
|
expectResult, result);
|
|
}
|
|
virResetLastError();
|
|
|
|
virNetworkDefFree(dev);
|
|
return ret;
|
|
}
|
|
|
|
struct testInfo {
|
|
const char *name;
|
|
unsigned int flags;
|
|
testCompareNetXML2XMLResult expectResult;
|
|
};
|
|
|
|
static int
|
|
testCompareXMLToXMLHelper(const void *data)
|
|
{
|
|
const struct testInfo *info = data;
|
|
int result = -1;
|
|
g_autofree char *inxml = NULL;
|
|
g_autofree char *outxml = NULL;
|
|
|
|
inxml = g_strdup_printf("%s/networkxml2xmlin/%s.xml", abs_srcdir, info->name);
|
|
outxml = g_strdup_printf("%s/networkxml2xmlout/%s.xml", abs_srcdir, info->name);
|
|
|
|
result = testCompareXMLToXMLFiles(inxml, outxml, info->flags,
|
|
info->expectResult);
|
|
|
|
return result;
|
|
}
|
|
|
|
static int
|
|
mymain(void)
|
|
{
|
|
int ret = 0;
|
|
|
|
#define DO_TEST_FULL(name, flags, expectResult) \
|
|
do { \
|
|
const struct testInfo info = {name, flags, expectResult}; \
|
|
if (virTestRun("Network XML-2-XML " name, \
|
|
testCompareXMLToXMLHelper, &info) < 0) \
|
|
ret = -1; \
|
|
} while (0)
|
|
#define DO_TEST(name) \
|
|
DO_TEST_FULL(name, 0, TEST_COMPARE_NET_XML2XML_RESULT_SUCCESS)
|
|
#define DO_TEST_FLAGS(name, flags) \
|
|
DO_TEST_FULL(name, flags, TEST_COMPARE_NET_XML2XML_RESULT_SUCCESS)
|
|
#define DO_TEST_PARSE_ERROR(name) \
|
|
DO_TEST_FULL(name, 0, TEST_COMPARE_NET_XML2XML_RESULT_FAIL_PARSE)
|
|
|
|
DO_TEST("dhcp6host-routed-network");
|
|
DO_TEST("empty-allow-ipv6");
|
|
DO_TEST("isolated-network");
|
|
DO_TEST("routed-network");
|
|
DO_TEST("routed-network-no-dns");
|
|
DO_TEST_PARSE_ERROR("routed-network-no-dns-extra-elements");
|
|
DO_TEST("open-network");
|
|
DO_TEST_PARSE_ERROR("open-network-with-forward-dev");
|
|
DO_TEST("nat-network");
|
|
DO_TEST("netboot-network");
|
|
DO_TEST("netboot-proxy-network");
|
|
DO_TEST("netboot-tftp");
|
|
DO_TEST("nat-network-dns-txt-record");
|
|
DO_TEST("nat-network-dns-srv-record");
|
|
DO_TEST("nat-network-dns-srv-records");
|
|
DO_TEST("nat-network-dns-srv-record-minimal");
|
|
DO_TEST("nat-network-dns-hosts");
|
|
DO_TEST("nat-network-dns-forward-plain");
|
|
DO_TEST("nat-network-dns-forwarders");
|
|
DO_TEST("nat-network-dns-forwarder-no-resolv");
|
|
DO_TEST("nat-network-forward-nat-ipv6");
|
|
DO_TEST("nat-network-forward-nat-address");
|
|
DO_TEST("nat-network-forward-nat-no-address");
|
|
DO_TEST("nat-network-mtu");
|
|
DO_TEST("8021Qbh-net");
|
|
DO_TEST("direct-net");
|
|
DO_TEST("host-bridge-net");
|
|
DO_TEST("vepa-net");
|
|
DO_TEST("bandwidth-network");
|
|
DO_TEST("openvswitch-net");
|
|
DO_TEST_FLAGS("passthrough-pf", VIR_NETWORK_XML_INACTIVE);
|
|
DO_TEST("hostdev");
|
|
DO_TEST_FLAGS("hostdev-pf", VIR_NETWORK_XML_INACTIVE);
|
|
DO_TEST("passthrough-address-crash");
|
|
DO_TEST("nat-network-explicit-flood");
|
|
DO_TEST("host-bridge-no-flood");
|
|
DO_TEST_PARSE_ERROR("hostdev-duplicate");
|
|
DO_TEST_PARSE_ERROR("passthrough-duplicate");
|
|
DO_TEST("metadata");
|
|
DO_TEST("set-mtu");
|
|
DO_TEST("dnsmasq-options");
|
|
DO_TEST("leasetime-seconds");
|
|
DO_TEST("leasetime-minutes");
|
|
DO_TEST("leasetime-hours");
|
|
DO_TEST("leasetime-infinite");
|
|
DO_TEST("isolated-ports");
|
|
|
|
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
|
|
}
|
|
|
|
VIR_TEST_MAIN(mymain)
|