Commits

nat_linden  committed 797318b Draft

MAINT-2168: fail with real message if required var PORT not set.
llhttpclient_test.cpp is only supposed to be run by test_llsdmessage_peer.py,
as specified in llmessage/CMakeLists.txt. test_llsdmessage_peer.py sets the
environment variable PORT before running INTEGRATION_TEST_llhttpclient. While
it's not yet clear under what circumstances INTEGRATION_TEST_llhttpclient
could find PORT not set (getenv() returning NULL), it's obvious that in that
case, the previous code might well crash. Make it at least fail with an
explanatory message rather than a mysterious large negative integer. In
theory, occurrences of that message could help us solve the underlying issue.

  • Participants
  • Parent commits 2ff226f

Comments (0)

Files changed (1)

File indra/llmessage/tests/llhttpclient_test.cpp

 namespace tut
 {
 	LLSD storage;
-	
+
 	class LLSDStorageNode : public LLHTTPNode
 	{
 	public:
 	{
 	public:
 		HTTPClientTestData():
-			local_server(STRINGIZE("http://127.0.0.1:" << getenv("PORT") << "/"))
+			PORT(getenv("PORT")),
+			// Turning NULL PORT into empty string doesn't make things work;
+			// that's just to keep this initializer from blowing up. We test
+			// PORT separately in the constructor body.
+			local_server(STRINGIZE("http://127.0.0.1:" << (PORT? PORT : "") << "/"))
 		{
+			ensure("Set environment variable PORT to local test server port", PORT);
 			apr_pool_create(&mPool, NULL);
 			LLCurl::initClass(false);
 			mServerPump = new LLPumpIO(mPool);
 
 			LLHTTPClient::setPump(*mClientPump);
 		}
-		
+
 		~HTTPClientTestData()
 		{
 			delete mServerPump;
 			LLHTTPStandardServices::useServices();
 			LLHTTPRegistrar::buildAllServices(root);
 		}
-		
+
 		void runThePump(float timeout = 100.0f)
 		{
 			LLTimer timer;
 			mServerPump = NULL;
 		}
 
+		const char* const PORT;
 		const std::string local_server;
 
 	private:
 			{
 				std::string msg =
 					llformat("error() called when not expected, status %d",
-						mStatus); 
+						mStatus);
 				fail(msg);
 			}
 		}
-	
+
 		void ensureStatusError()
 		{
 			if (!mSawError)
 				fail("error() wasn't called");
 			}
 		}
-		
+
 		LLSD getResult()
 		{
 			return mResult;
 		{
 			return mHeader;
 		}
-	
+
 	protected:
 		bool mSawError;
 		U32 mStatus;
 				: mClient(client)
 			{
 			}
-		
+
 		public:
 			static Result* build(HTTPClientTestData& client)
 			{
 				return new Result(client);
 			}
-			
+
 			~Result()
 			{
 				mClient.mResultDeleted = true;
 			}
-			
+
 			virtual void error(U32 status, const std::string& reason)
 			{
 				mClient.mSawError = true;
 							const LLSD& content)
 			{
 				LLHTTPClient::Responder::completed(status, reason, content);
-				
+
 				mClient.mSawCompleted = true;
 			}
 
 			mResult.clear();
 			mHeader.clear();
 			mResultDeleted = false;
-			
+
 			return Result::build(*this);
 		}
 	};
-	
-	
+
+
 	typedef test_group<HTTPClientTestData>	HTTPClientTestGroup;
 	typedef HTTPClientTestGroup::object		HTTPClientTestObject;
 	HTTPClientTestGroup httpClientTestGroup("http_client");