13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*-------------------------------------------------------------------------
23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program Execution Server
33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * ---------------------------------------------
43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
53c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Copyright 2014 The Android Open Source Project
63c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
73c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Licensed under the Apache License, Version 2.0 (the "License");
83c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * you may not use this file except in compliance with the License.
93c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * You may obtain a copy of the License at
103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *      http://www.apache.org/licenses/LICENSE-2.0
123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Unless required by applicable law or agreed to in writing, software
143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * distributed under the License is distributed on an "AS IS" BASIS,
153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * See the License for the specific language governing permissions and
173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * limitations under the License.
183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*!
203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \file
213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief ExecServer main().
223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "xsExecutionServer.hpp"
253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "deString.h"
263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#if (DE_OS == DE_OS_WIN32)
283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#	include "xsWin32TestProcess.hpp"
293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#else
303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#	include "xsPosixTestProcess.hpp"
313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#endif
323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <cstdlib>
343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include <cstdio>
353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
363c827367444ee418f129b2c238299f49d3264554Jarkko Poyryint main (int argc, const char* const* argv)
373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	xs::ExecutionServer::RunMode	runMode		= xs::ExecutionServer::RUNMODE_FOREVER;
393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	int								port		= 50016;
403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#if (DE_OS == DE_OS_WIN32)
423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	xs::Win32TestProcess			testProcess;
433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#else
443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	xs::PosixTestProcess			testProcess;
453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#endif
463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	DE_STATIC_ASSERT(sizeof("a") == 2);
483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#if (DE_OS != DE_OS_WIN32)
503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Set line buffered mode to stdout so executor gets any log messages soon enough.
513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	setvbuf(stdout, DE_NULL, _IOLBF, 4*1024);
523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#endif
533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Parse command line.
553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	for (int argNdx = 1; argNdx < argc; argNdx++)
563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		const char* arg = argv[argNdx];
583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		if (deStringBeginsWith(arg, "--port="))
603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			port = atoi(arg+sizeof("--port=")-1);
613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		else if (deStringEqual(arg, "--single"))
623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry			runMode = xs::ExecutionServer::RUNMODE_SINGLE_EXEC;
633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	try
663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		xs::ExecutionServer server(&testProcess, DE_SOCKETFAMILY_INET4, port, runMode);
683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		printf("Listening on port %d.\n", port);
693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		server.runServer();
703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	catch (const std::exception& e)
723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	{
733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		printf("%s\n", e.what());
743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry		return -1;
753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	}
763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	return 0;
783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}
79