public void VerifyAmbrosiaLogFile()

in AmbrosiaTest/AmbrosiaTest/Utilities.cs [630:838]


        public void VerifyAmbrosiaLogFile(string testName, long numBytes, bool checkCmpFile, bool startWithFirstFile, string CurrentVersion, string optionalNumberOfClient = "", bool asyncTest = false, bool checkForDoneString = true, string ambrosiaLogDir = "")
        {
            string currentDir = Directory.GetCurrentDirectory();

            // Doing this for multi client situations
            string optionalMultiClientStartingPoint = "";
            if (optionalNumberOfClient == "")
            {
                optionalNumberOfClient = "1";
            }
            else
            {
                optionalMultiClientStartingPoint = "0";
            }

            string clientJobName = testName + "clientjob" + optionalMultiClientStartingPoint;
            string serverName = testName + "server";
            string ambrosiaLogDirFromPTI;
            string ambServiceLogPath;


            // allows for using different ambrosia log directory
            if (ambrosiaLogDir == "")
            {
                ambrosiaLogDir = baseAmbrosiaPath + ConfigurationManager.AppSettings["AmbrosiaLogDirectory"];  // don't put + "\\" on end as mess up location .. need append in Ambrosia call though
                ambrosiaLogDirFromPTI = baseAmbrosiaPath + ConfigurationManager.AppSettings["AmbrosiaLogDirectory"] + "\\";
                ambServiceLogPath = ambrosiaLogDir + "\\";

            }
            else
            {
                ambServiceLogPath = "..\\"+ambrosiaLogDir + "\\";
                ambrosiaLogDirFromPTI = "..\\..\\"+ambrosiaLogDir +"\\"; 
            }

            // if not in standard log place, then must be in InProc log location which is relative to PTI - safe assumption
/*  *#*#* DELETE *#*#*#
            if (Directory.Exists(ambrosiaLogDir) ==false)
            {
                ambrosiaLogDir = baseAmbrosiaPath + ConfigurationManager.AppSettings["AmbrosiaLogDirectory"];
                ambrosiaLogDirFromPTI = "..\\..\\" + ambrosiaLogDir+"\\";   // feels like there has to be better way of determining this - used for TTD
                ambServiceLogPath = "..\\..\\"+ambrosiaLogDir + "\\";
            }
*/
            // used to get log file
            string ambrosiaClientLogDir = ambrosiaLogDir + "\\" + testName + "clientjob" + optionalMultiClientStartingPoint + "_0";  // client is always 0 so don't use + CurrentVersion;
            string ambrosiaServerLogDir = ambrosiaLogDir + "\\" + testName + "server_" + CurrentVersion;

            string startingClientChkPtVersionNumber = "1";
            string clientFirstFile = "";

            // Get most recent version of CLIENT log file and check point
            string clientLogFile = "";
            if (Directory.Exists(ambrosiaClientLogDir))
            {
                DirectoryInfo d = new DirectoryInfo(ambrosiaClientLogDir);
                FileInfo[] files = d.GetFiles().OrderBy(p => p.CreationTime).ToArray();

                foreach (FileInfo file in files)
                {
                    // Sets the first (oldest) file
                    if (clientFirstFile == "")
                    {
                        clientFirstFile = file.Name;
                    }

                    // This will be most recent file
                    clientLogFile = file.Name;
                }
            }
            else
            {
                Assert.Fail("<VerifyAmbrosiaLogFile> Unable to find Client Log directory: " + ambrosiaClientLogDir);
            }

            // can get first file or most recent
            if (startWithFirstFile)
            {
                clientLogFile = clientFirstFile;
            }

            // determine if log or chkpt file
            if (clientLogFile.Contains("chkpt"))
            {
                int chkPtPos = clientLogFile.IndexOf("chkpt");
                startingClientChkPtVersionNumber = clientLogFile.Substring(chkPtPos + 5);
            }
            else
            {
                int LogPos = clientLogFile.IndexOf("log");
                startingClientChkPtVersionNumber = clientLogFile.Substring(LogPos + 3);
            }

            // Get most recent version of SERVER log file and check point
            string startingServerChkPtVersionNumber = "1";

            string serverFirstFile = "";
            string serverLogFile = "";
            if (Directory.Exists(ambrosiaServerLogDir))
            {
                DirectoryInfo d = new DirectoryInfo(ambrosiaServerLogDir);
                FileInfo[] files = d.GetFiles().OrderBy(p => p.CreationTime).ToArray();

                foreach (FileInfo file in files)
                {
                    // Sets the first (oldest) file
                    if (serverFirstFile == "")
                    {
                        serverFirstFile = file.Name;
                    }

                    // This will be most recent file
                    serverLogFile = file.Name;
                }
            }
            else
            {
                Assert.Fail("<VerifyAmbrosiaLogFile> Unable to find Server Log directory: " + ambrosiaClientLogDir);
            }


            // can get first file or most recent
            if (startWithFirstFile)
            {
                serverLogFile = serverFirstFile;
            }

            // determine if log or chkpt file
            if (serverLogFile.Contains("chkpt"))
            {
                int chkPtPos = serverLogFile.IndexOf("chkpt");
                startingServerChkPtVersionNumber = serverLogFile.Substring(chkPtPos + 5);
            }
            else
            {
                int LogPos = serverLogFile.IndexOf("log");
                startingServerChkPtVersionNumber = serverLogFile.Substring(LogPos + 3);
            }

            // AMB Call for Job
            string logOutputFileName_AMB1 = testName + "_AMB1_Verify.log";
            AMB_Settings AMB1 = new AMB_Settings
            {
                AMB_ServiceName = clientJobName,
                AMB_ServiceLogPath = ambServiceLogPath,
                AMB_StartingCheckPointNum = startingClientChkPtVersionNumber,
                AMB_Version = "0",   // always 0 CurrentVersion.ToString(),
                AMB_TestingUpgrade = "N",
                AMB_PortAppReceives = "1000",
                AMB_PortAMBSends = "1001"
            };
            CallAMB(AMB1, logOutputFileName_AMB1, AMB_ModeConsts.DebugInstance);

            // AMB for Server
            string logOutputFileName_AMB2 = testName + "_AMB2_Verify.log";
            AMB_Settings AMB2 = new AMB_Settings
            {
                AMB_ServiceName = serverName,
                AMB_ServiceLogPath = ambServiceLogPath,
                AMB_StartingCheckPointNum = startingServerChkPtVersionNumber,
                AMB_Version = CurrentVersion.ToString(),
                AMB_TestingUpgrade = "N",
                AMB_PortAppReceives = "2000",
                AMB_PortAMBSends = "2001"
            };
            CallAMB(AMB2, logOutputFileName_AMB2, AMB_ModeConsts.DebugInstance);

            string logOutputFileName_ClientJob_Verify;
            string logOutputFileName_Server_Verify;

            // if async, use the async job and server
            if (asyncTest)
            {
                // Job call
                logOutputFileName_ClientJob_Verify = testName + "_ClientJob_Verify.log";
                int clientJobProcessID = StartAsyncPerfClientJob("1001", "1000", clientJobName, serverName, "1", logOutputFileName_ClientJob_Verify);

                //Server Call
                logOutputFileName_Server_Verify = testName + "_Server_Verify.log";
                int serverProcessID = StartAsyncPerfServer("2001", "2000", serverName, logOutputFileName_Server_Verify);
            }
            else
            {
                // Job call
                logOutputFileName_ClientJob_Verify = testName + "_ClientJob_Verify.log";
                int clientJobProcessID = StartPerfClientJob("1001", "1000", clientJobName, serverName, "65536", "13", logOutputFileName_ClientJob_Verify);

                //Server Call
                logOutputFileName_Server_Verify = testName + "_Server_Verify.log";
                int serverProcessID = StartPerfServer("2001", "2000", clientJobName, serverName, logOutputFileName_Server_Verify, Convert.ToInt32(optionalNumberOfClient), false);
            }

            // wait until done running
            bool pass = WaitForProcessToFinish(logOutputFileName_ClientJob_Verify, numBytes.ToString(), 15, false, testName, true, checkForDoneString);
            pass = WaitForProcessToFinish(logOutputFileName_Server_Verify, numBytes.ToString(), 15, false, testName, true, checkForDoneString);
            

            // MTFs don't check cmp files because they change from run to run 
            if (checkCmpFile)
            {
                // verify new log files to cmp files
                VerifyTestOutputFileToCmpFile(logOutputFileName_Server_Verify);
                VerifyTestOutputFileToCmpFile(logOutputFileName_ClientJob_Verify);
            }

            // Test Time Travel Debugging on the Log Files from PTI job and PTI server - don't do for MTF as not needed for TTD handled by other tests also cmp files change too much
            VerifyTimeTravelDebugging(testName, numBytes, clientJobName, serverName, ambrosiaLogDirFromPTI, startingClientChkPtVersionNumber, startingServerChkPtVersionNumber, optionalNumberOfClient, CurrentVersion, checkCmpFile, checkForDoneString);

        }