I have multiple unit tests that have to connect to a MySQL Server to retrieve or modify data (I know this is more like integration tests, but let’s not dive into that for now). The full suite of NUnit tests pass with no issues both in NUnit GUI and in NUnit console.
I am now automating our build process using Hudson Continuous Integration. As part of that I introduced this batch command that will invoke NUnit console to execute the tests just after building the full solution:
"C:\Program Files (x86)\NUnit 2.5.10\bin\net-2.0\nunit-console.exe" /framework:net-4.0 Tests\MyTestProject\bin\Debug\MyTestProject.dll /xml=MyTestProject.dll.xml /config:Debug
exit 0
It should just work but what I get is this exception for all the tests tha connect to the database server:
MySql.Data.MySqlClient.MySqlException : Unable to connect to any of the specified MySQL hosts.
So Hudson just can’t reach the MySQL Server, even when the connection string is the same as if I executed the tests manually. Hudson and the server are in the same machine by the way, which is actually my dev box for now. Also, the few tests that do not need the database will pass with no problems.
Why Hudson can’t reach the MySQL Server?
UPDATE: Not all tests are failing, but only the tests that use a connection string that require Shared Memory, like this:
server=localhost;user id=root;pooling=false;persist security info=true;connection reset=true;allow user variables=true;password=;protocol=sharedmemory; shared memory name=MYSQL
Tests that do not include sharedmemory successfully pass.
So, seems like I finally made it work. You just have to run Hudson from the command line, not as a Windows service:
I see no connection problems to MySQL anymore, not even for Shared Memory connections. All tests pass. Also, I didn’t mention that I’m running MySQL Server from a console too, not as a Windows service.
Another way to make this work is running both Hudson and MySQL Server as Windows services, but you will need to change the Hudson account to be the one you use to login to your machine.