diff options
author | Pavel Grunt <pgrunt@redhat.com> | 2016-03-07 18:20:41 +0100 |
---|---|---|
committer | Pavel Grunt <pgrunt@redhat.com> | 2016-08-30 14:56:39 +0200 |
commit | 1bc194026012c9ac1323aa77e7189fde0a53cb12 (patch) | |
tree | 06908593250b5c823a889c6c1e9cd78116003fb8 | |
parent | 6ff311c69963c498c57a528fdd1055594816fb8d (diff) |
test: Add tests for monitor mappingtest-mapping
(cherry picked from commit 3e42ec7c39780d55b506f91067f947d36ecc6ed7)
-rw-r--r-- | src/Makefile.am | 30 | ||||
-rw-r--r-- | src/test-monitor-mapping.c | 119 |
2 files changed, 143 insertions, 6 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index b8dbb35..ea1cbc9 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -75,7 +75,7 @@ COMMON_SOURCES += \ ovirt-foreign-menu.h ovirt-foreign-menu.c endif -check_PROGRAMS = test-version-compare +check_PROGRAMS = test-version-compare test-monitor-mapping TESTS = $(check_PROGRAMS) test_version_compare_SOURCES = \ virt-viewer-util.c \ @@ -87,12 +87,30 @@ test_version_compare_LDFLAGS = \ $(GTK_LIBS) \ $(LIBXML2_LIBS) \ $(NULL) -test_version_compare_CFLAGS = \ +test_version_compare_CFLAGS = \ -DLOCALE_DIR=\""$(datadir)/locale"\" \ - $(GLIB2_CFLAGS) \ - $(GTK_CFLAGS) \ - $(LIBXML2_CFLAGS) \ - $(WARN_CFLAGS) \ + $(GLIB2_CFLAGS) \ + $(GTK_CFLAGS) \ + $(LIBXML2_CFLAGS) \ + $(WARN_CFLAGS) \ + $(NULL) + +test_monitor_mapping_SOURCES = \ + virt-viewer-util.c \ + virt-viewer-util.h \ + test-monitor-mapping.c \ + $(NULL) +test_monitor_mapping_LDFLAGS = \ + $(GLIB2_LIBS) \ + $(GTK_LIBS) \ + $(LIBXML2_LIBS) \ + $(NULL) +test_monitor_mapping_CFLAGS = \ + -DLOCALE_DIR=\""$(datadir)/locale"\" \ + $(GLIB2_CFLAGS) \ + $(GTK_CFLAGS) \ + $(LIBXML2_CFLAGS) \ + $(WARN_CFLAGS) \ $(NULL) if HAVE_LIBVIRT diff --git a/src/test-monitor-mapping.c b/src/test-monitor-mapping.c new file mode 100644 index 0000000..004aa51 --- /dev/null +++ b/src/test-monitor-mapping.c @@ -0,0 +1,119 @@ +/* -*- Mode: C; c-basic-offset: 4; indent-tabs-mode: nil -*- */ +/* + * Virt Viewer: A virtual machine console viewer + * + * Copyright (C) 2016 Red Hat, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include <config.h> +#include <glib.h> +#include <virt-viewer-util.h> + +gboolean doDebug = FALSE; + +/** + * is_valid_monitor_mapping: + * @mapping: a value for the "monitor-mapping" key + * + * Tests the validity of the settings file for the "monitor-mapping" key: + * [test-monitor-mapping] + * monitor-mapping=@mapping + * + * Returns: %TRUE if the mapping is valid + */ +static gboolean +is_valid_monitor_mapping(const gchar *mapping) +{ + GKeyFile *key_file; + gboolean valid; + const gint nmonitors = 4; + const gchar *group_name = "test-monitor-mapping"; + const gchar *key = "monitor-mapping"; + const gchar *key_data_fmt = "[%s]\n%s=%s\n"; + gchar *key_data = g_strdup_printf(key_data_fmt, group_name, key, mapping); + + key_file = g_key_file_new(); + valid = g_key_file_load_from_data(key_file, key_data, -1, G_KEY_FILE_NONE, NULL); + if (valid) { + gsize nmappings; + gchar **mappings = g_key_file_get_string_list(key_file, group_name, key, &nmappings, NULL); + GHashTable *map = virt_viewer_parse_monitor_mappings(mappings, nmappings, nmonitors); + + valid = (map != NULL); + + g_strfreev(mappings); + g_clear_pointer(&map, g_hash_table_unref); + } + + g_key_file_free(key_file); + g_free(key_data); + return valid; +} + +int main(void) +{ + /* valid monitor mappings */ + g_assert_true(is_valid_monitor_mapping("1:1")); + g_assert_true(is_valid_monitor_mapping("1:1;2:2")); + g_assert_true(is_valid_monitor_mapping("1:1;2:2;3:3;")); + g_assert_true(is_valid_monitor_mapping("1:2;2:1;3:3;4:4")); + g_assert_true(is_valid_monitor_mapping("4:1;3:2;2:3;1:4")); + + /* invalid monitors mappings */ + /* zero ids */ + g_assert_false(is_valid_monitor_mapping("0:0")); + /* negative guest display id */ + g_assert_false(is_valid_monitor_mapping("-1:1")); + /* negative client monitor id */ + g_assert_false(is_valid_monitor_mapping("1:-1")); + /* negative guest display & client monitor id */ + g_assert_false(is_valid_monitor_mapping("-1:-1")); + /* high guest display id */ + g_assert_false(is_valid_monitor_mapping("100:1")); + /* high client monitor id */ + g_assert_false(is_valid_monitor_mapping("1:100")); + /* missing guest display id */ + g_assert_false(is_valid_monitor_mapping("1:1;3:3")); + /* guest display id used twice */ + g_assert_false(is_valid_monitor_mapping("1:1;1:2")); + /* client monitor id used twice */ + g_assert_false(is_valid_monitor_mapping("1:1;2:1")); + /* floating point guest display id */ + g_assert_false(is_valid_monitor_mapping("1.111:1")); + /* floating point client monitor id */ + g_assert_false(is_valid_monitor_mapping("1:1.111")); + /* empty mapping */ + g_assert_false(is_valid_monitor_mapping("")); + g_assert_false(is_valid_monitor_mapping(";")); + /* missing guest display id */ + g_assert_false(is_valid_monitor_mapping(":1")); + /* missing client monitor id */ + g_assert_false(is_valid_monitor_mapping("1:")); + /* missing guest display & client monitor id */ + g_assert_false(is_valid_monitor_mapping(":")); + /*missing colon */ + g_assert_false(is_valid_monitor_mapping("11")); + /*missing semicolon */ + g_assert_false(is_valid_monitor_mapping("1:12:2")); + /* strings */ + g_assert_false(is_valid_monitor_mapping("1:a")); + g_assert_false(is_valid_monitor_mapping("a:1")); + g_assert_false(is_valid_monitor_mapping("a:a")); + g_assert_false(is_valid_monitor_mapping("monitor mapping")); + + return 0; +} |