1 /*
2  * Copyright (C) 2010 - 2011 Vivien Malerba <malerba@gnome-db.org>
3  * Copyright (C) 2011 Murray Cumming <murrayc@murrayc.com>
4  *
5  * This program is free software; you can redistribute it and/or
test_complement()6  * modify it under the terms of the GNU General Public License
7  * as published by the Free Software Foundation; either version 2
8  * of the License, or (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
18  */
19 #include <libgda/libgda.h>
20 #include <string.h>
21 
22 typedef struct {
23 	gchar *in_string;
24 	gchar *exp_provider;
25 	gchar *exp_cnc_params;
26 	gchar *exp_user;
27 	gchar *exp_pass;
28 } ATest;
29 
30 ATest the_tests[] = {
31 	{"PostgreSQL://meme:pass@DB_NAME=mydb;HOST=server",
32 	 "PostgreSQL", "DB_NAME=mydb;HOST=server",
33 	 "meme", "pass"},
34 	{"PostgreSQL://meme@DB_NAME=mydb;HOST=server;PASSWORD=pass",
35 	 "PostgreSQL", "DB_NAME=mydb;HOST=server",
36 	 "meme", "pass"},
37 	{"PostgreSQL://meme@DB_NAME=mydb;PASSWORD=pass;HOST=server",
38 	 "PostgreSQL", "DB_NAME=mydb;HOST=server",
39 	 "meme", "pass"},
40 	{"PostgreSQL://meme@PASSWORD=pass;DB_NAME=mydb;HOST=server",
41 	 "PostgreSQL", "DB_NAME=mydb;HOST=server",
42 	 "meme", "pass"},
43 	{"PostgreSQL://DB_NAME=mydb;HOST=server;USERNAME=meme;PASSWORD=pass",
44 	 "PostgreSQL", "DB_NAME=mydb;HOST=server",
45 	 "meme", "pass"},
46 	{"PostgreSQL://DB_NAME=mydb;HOST=server;PASSWORD=pass;USERNAME=meme",
47 	 "PostgreSQL", "DB_NAME=mydb;HOST=server",
48 	 "meme", "pass"},
49 	{"PostgreSQL://DB_NAME=mydb;USERNAME=meme;PASSWORD=pass;HOST=server",
50 	 "PostgreSQL", "DB_NAME=mydb;HOST=server",
51 	 "meme", "pass"},
52 	{"PostgreSQL://PASSWORD=pass;USERNAME=meme;DB_NAME=mydb;HOST=server",
53 	 "PostgreSQL", "DB_NAME=mydb;HOST=server",
54 	 "meme", "pass"},
55 	{"PostgreSQL://:pass@USERNAME=meme;DB_NAME=mydb;HOST=server",
56 	 "PostgreSQL", "DB_NAME=mydb;HOST=server",
57 	 "meme", "pass"},
58 	{"PostgreSQL://:pass@DB_NAME=mydb;HOST=server;USERNAME=meme",
59 	 "PostgreSQL", "DB_NAME=mydb;HOST=server",
60 	 "meme", "pass"},
61 	{"PORT=5432;ADM_LOGIN=gdauser;HOST=gdatester;ADM_PASSWORD=GdaUser;DB_NAME=testcheckdb",
62 	 NULL,
63 	 "PORT=5432;ADM_LOGIN=gdauser;HOST=gdatester;ADM_PASSWORD=GdaUser;DB_NAME=testcheckdb",
64 	 NULL, NULL},
65 	{"PORT=5432;ADM_LOGIN=gdauser;HOST=gdatester;ADM_PASSWORD=GdaUser;DB_NAME=testcheckdb;USERNAME=meme;PASSWORD=pass",
66 	 NULL,
67 	 "PORT=5432;ADM_LOGIN=gdauser;HOST=gdatester;ADM_PASSWORD=GdaUser;DB_NAME=testcheckdb",
68 	 "meme", "pass"},
69 	{"PORT=5432;ADM_LOGIN=gdauser;HOST=gdatester;USERNAME=meme;PASSWORD=pass;ADM_PASSWORD=GdaUser;DB_NAME=testcheckdb",
70 	 NULL,
71 	 "PORT=5432;ADM_LOGIN=gdauser;HOST=gdatester;ADM_PASSWORD=GdaUser;DB_NAME=testcheckdb",
72 	 "meme", "pass"}
73 };
74 
75 int
76 main (int argc, char *argv[])
77 {
78 #if GLIB_CHECK_VERSION(2,36,0)
79 #else
80 	g_type_init();
81 #endif
82 	gda_init ();
83 
84 	guint i;
85 	for (i = 0; i < sizeof (the_tests) / sizeof (ATest); i++) {
86 		ATest test = the_tests[i];
87 		gchar *cnc_params, *prov, *user, *pass;
88 		gda_connection_string_split (test.in_string, &cnc_params, &prov, &user, &pass);
89 		g_print ("[%s]\n  cnc_params=[%s]\n  prov      =[%s]\n  user      =[%s]\n  pass      =[%s]\n",
90 			test.in_string, cnc_params, prov, user, pass);
91 		if (g_strcmp0 (cnc_params, test.exp_cnc_params)) {
92 			g_print ("Wrong cnc_params result\n");
93 			goto onerror;
94 		}
95 		if (g_strcmp0 (prov, test.exp_provider)) {
96 			g_print ("Wrong provider result\n");
97 			goto onerror;
98 		}
99 		if (g_strcmp0 (user, test.exp_user)) {
100 			g_print ("Wrong username result\n");
101 			goto onerror;
102 		}
103 		if (g_strcmp0 (pass, test.exp_pass)) {
104 			g_print ("Wrong password result\n");
105 			goto onerror;
106 		}
107 		g_free (cnc_params);
108 		g_free (prov);
109 		g_free (user);
110 		g_free (pass);
111 
112 	}
113 
114 	return 0;
115  onerror:
116 	g_print ("Error, aborting\n");
117 	return 1;
118 }
119 
120