#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_outfile=D:\test\Sanity_Peer A.exe
#AutoIt3Wrapper_UseX64=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.6.1
 Author:         Alexander Rieß

 History:


 Script Function:
	- Installation SNT 2.8
	- Log In with existing Account
	- Create new Sync Folder
	- Uninstallation



#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here

#include-once
#include "..\TestButlerHelper_forSanity.au3"
#include "..\OL_Helper.au3"
#include <file.au3>

;Init
$variablesFilePath=@ScriptDir&"\installVars.txt" ;the file with the variables
$uninstDir = @ProgramFilesDir & "\SYNCING.NET Technologies\SYNCING.NET\uninst.exe" ;uninstallation's file directory

Global $failed="Failed"
Global $sucess="Sucess"

;inputVariables
;$fileName=TLoadVariableFromFile($variablesFilePath,"fileName")
;$language=TLoadVariableFromFile($variablesFilePath,"language")
;$installationPath="" ;not used at the moment
;$welcomeText=TLoadVariableFromFile($variablesFilePath,"welcomeText")

;Paths and Files
$fileName="Setup_rls.exe"

$datapath = "C:\10mal100MB"
$serverpath = "\\192.168.1.62\riess\Fileshare\NIGHTLY_28\RecentBuild\"
$scriptpath = "c:\SanityTests\TestExecution\"
$fsPath = "C:\SanityTests\"
$networkPathPeerB = "\\192.168.1.55\SanityTests_PeerB\TestExecution\"
$archivepath = "\\192.168.1.61\Fileshare\NIGHTLY_28\Archive\"

;Log File Names
$logPeerA = "resultPeerA.log"
$logPeerB = "resultPeeB.log"

$language="English"
$welcomeText="Welcome"

$userMail = "autotester1@syncing.net"
$password = "syncmaster"
$IP= "null"
;windowID variables
$languageSelect="[CLASS:#32770]"

;PreTest Waiting for right Time ;-)
_checkTime()
_copyFromServer($serverpath, $scriptpath)

_sendNext_PeerB($IP)
_recvNext($IP)

;#Case001 Installation
	$install = _install($fileName, $languageSelect, $welcomeText, $language)
	If  $install = "failed" Then
		_SendFailed_PeerB($IP)
		_writeToLog("Failed","Install failed")
		_sendMail()
		Sleep(10000)
		Shutdown(6)
		Exit
	ElseIf $install = "sucess" Then
		_writeToLog("Sucess","Install sucess")
		_sendNext_PeerB($IP)
	EndIf

	If _recvNext($IP) = "sucess" Then
		_writeToLog($sucess,"Peer B: Installation sucess")
		$useExistingAccount = _useExistingAccount($userMail, $password)
	Else
		_writeToLog($failed,"Peer B: Installation failed")
		Shutdown(6)
		Exit
	EndIf

;#Case003 Configuration Existing Account

	If  $useExistingAccount = "sucess" Then
		_SendNext_PeerB($IP)
	Else
		_SendFailed_PeerB($IP)
	EndIf

	If _recvNext($IP) = "sucess" Then
		_writeToLog($sucess, "Peer B: Configuration Existing Account sucess")
		$createSyncFolder = _createSyncFolder()
	Else
		_writeToLog($failed,"Peer B: Configuration Existing Account failed")
		$uninstall = _uninstall($uninstDir)
	EndIf

;#Case004 Create Sync folder

	If $createSyncFolder = "sucess" Then
		_sendNext_PeerB($IP)
	Else
		_SendFailed_PeerB($IP)
	EndIf

	If _recvNext($IP) = "sucess" Then
		_writeToLog($sucess,"Peer B: Create Sync Folder sucess")
		$syncFiles = _syncFiles($datapath, $fsPath)
	Else
		_writeToLog($failed, "Peer B: Create Sync Folder sucess")
	EndIf

;#Case006 Sync Files
	;Sync Files
	If $syncFiles = "sucess" Then
		_sendNext_PeerB($IP)
	Else
		_SendFailed_PeerB($IP)
	EndIf

	If _recvNext($IP) = "sucess" Then
		_writeToLog($sucess,"Peer B: Sync Files sucess")
		$deleteSyncFiles = _deleteSyncFiles($fsPath)
	Else
		_writeToLog($failed, "Peer B: Sync Files failed")
	EndIf

	;delete Sync Files
	If $deleteSyncFiles = "sucess" Then
		_sendNext_PeerB($IP)
	Else
		_sendFailed_PeerB($IP)
	EndIf

	If _recvNext($IP) = "sucess" Then
		_writeToLog($sucess, "Peer B: Delete Sync Files sucess")
		$deleteSymcFolder = _deleteSyncFolder()
	Else
		_writeToLog($failed, "Peer B: Delete Sync Files sucess")
	EndIf

;#Case010 Delete Sync Folder

	If _deleteSyncFolder() = "sucess" Then
		_sendNext_PeerB($IP)
	Else
		_sendFailed_PeerB($IP)
	EndIf

	If _recvNext($IP) = "sucess" Then
		_writeToLog($sucess, "Peer B: Delete Sync Folder sucess")
		$uninstall = _uninstall($uninstDir)
	Else
		_writeToLog($failed, "Peer B: Delete Sync Folder failed")
	EndIf

;#Case012 Uninstallation
	If $uninstall = "sucess" Then
		_SendNext_PeerB($IP)
	Else
		_sendFailed_PeerB($IP)
	EndIf

	If _recvNext($IP) = "sucess" Then
		_writeToLog($sucess, "Peer B: Uninstall sucess")
		_sendMail()
	Else
		_writeToLog($failed, "Peer B: Uninstall failed")
		_sendMail()
	EndIf


_sendNext_PeerB($IP)

Shutdown(6)

Exit


Func _SendNext_PeerB($IP)
	TCPStartup() ; TCP wird initialisiert
	$socket = TCPConnect("192.168.1.55", 4332) ; Versucht eine Verbindung zum Server aufzubauen und speichert die SocketID in "$socket" ab
	If $socket = -1 Then ; Wenn $socket = -1 ist, Fehlermeldung ausgeben
		MsgBox(16, "Error", "Die Verbindung zum Server konnte nicht hergestellt werden!") ; Fehlermeldung
	EndIf

	$sendedBytes = TCPSend($socket, "next")
		If $sendedBytes = 0 Then ; Wenn der Rückgabewert von TCPSend(...) 0 ist, Fehlermeldung ausgeben
			MsgBox(16, "Error", "Das Paket konnte nicht gesendet werden.") ; Fehlermeldung
		EndIf

TCPCloseSocket($socket)
TCPShutdown()
EndFunc

Func _SendFailed_PeerB($IP)
	TCPStartup() ; TCP wird initialisiert
	$socket = TCPConnect("192.168.1.55", 4332) ; Versucht eine Verbindung zum Server aufzubauen und speichert die SocketID in "$socket" ab
	If $socket = -1 Then ; Wenn $socket = -1 ist, Fehlermeldung ausgeben
		MsgBox(16, "Error", "Die Verbindung zum Server konnte nicht hergestellt werden!") ; Fehlermeldung
	EndIf

	$sendedBytes = TCPSend($socket, "failed")
		If $sendedBytes = 0 Then ; Wenn der Rückgabewert von TCPSend(...) 0 ist, Fehlermeldung ausgeben
			MsgBox(16, "Error", "Das Paket konnte nicht gesendet werden.") ; Fehlermeldung
		EndIf

TCPCloseSocket($socket)
TCPShutdown()
EndFunc

Func _recvNext($IP)
	$k=1
	TCPStartup() ; TCP wird initialisiert
	$mainsocket = TCPListen("192.168.1.54", 4331) ; Den mainsocket erstellen
	While $k=1 ; Endlosschleife
		$acceptedSocket = TCPAccept($mainsocket) ; Wir versuchen eine möglicher Verbindung anzunehmen
		If $acceptedSocket <> -1 Then ; Wenn $acceptedSocket ungleich -1 ist, ...
			$receivedData = TCPRecv($acceptedSocket, 1024) ; Wenn eine Socketverbindung hergestellt wurde, empfange ein Paket vom Client ($connectedSocket)
				If $receivedData = "next" Then
					;MsgBox(64,"Info",$receivedData)
					$k=0
					$return = "sucess"
				ElseIf $receivedData = "failed" Then
					$k=0
					$return = "failed"
				EndIf
			TCPCloseSocket($acceptedSocket)
		EndIf
	WEnd
	TCPCloseSocket($mainsocket)
	TCPShutdown()
	Return $return
EndFunc

Func _uninstall($uninstDir)
	$issue = "sucess"
	;check wether the uninstallation's file exist or not
	If Not FileExists($uninstDir) Then
		MsgBox(64, "Information", "SYNCING.NET is not installed or has been already deinstalled")
		Failed("SYNCING.NET is not installed or has been already deinstalled")
		Exit
	EndIf

	;uninstall block starts hier
	If TRun($uninstDir,"Starting "&$uninstDir&" failed !")= "fail" Then
		$issue = "failed"
	EndIf

	If WinWaitActivate("SYNCING.NET 2.8 Uninstall","Do you want to uninstall SYNCING.NET now?",60,"The confirm's dialog for uninstallation could not open") = "fail" Then
		$issue = "failed"
	EndIf
	If TControlClick("SYNCING.NET 2.8 Uninstall","","[CLASS:Button; INSTANCE:1]","Cannot select OK to confirm the uninstallation") = "fail" Then
		$issue = "failed"
	EndIf

	If WinWaitActivate("SYNCING.NET 2.8 Uninstall","",60,"Confirmation's dialog for keeping SyncNetworks could not open")= "fail" Then
		$issue = "failed"
	EndIf
	If TControlClick("SYNCING.NET 2.8 Uninstall", "", "[CLASS:Button; INSTANCE:2]","Could not click on NO button for not keeping networks ") = "fail" Then
		$issue = "failed"
	EndIf

	If WinWaitActivate("SYNCING.NET 2.8 Uninstall","",60,"Confirmation's dialog for keeping license could not open") = "fail" Then
			$issue = "failed"
	EndIf
	If TControlClick("SYNCING.NET 2.8 Uninstall", "", "[CLASS:Button; INSTANCE:1]","Could not click on YES button for not keeping license")= "fail" Then;click on yes button to not keeping licence
		$issue = "failed"
	EndIf

	If WinWaitActivate("SYNCING.NET 2.8 Uninstall","SYNCING.NET was removed successfully.",60,"Dialog to confirm the successfully uninstallation could not open") = "fail" Then
		$issue = "failed"
	EndIf
	If TControlClick("SYNCING.NET 2.8 Uninstall", "", "[CLASS:Button; INSTANCE:1]","Could not confirm unstallation") = "fail" Then
		$issue = "failed"
	EndIf

	If $issue = "sucess" then
		Sucess("Uninstallation PeerA successfully without errors.")
	Else
		Failed("Uninstallation")
	EndIf

	return $issue
EndFunc

Func _checkConnectionToServer()
	$tries = 0
	While $tries <5
		$var = Ping("www.auth1.syncing.net")
		If $var Then; also possible:  If @error = 0 Then ...
			$tries = 5
		EndIf
		$tries = $tries + 1
		Sleep(50000)
	WEnd
	If $var Then
		Sucess("Error! Internet Connection lost!")
	EndIf
EndFunc

Func _checkTime()
	$hh=0
	While $hh <> 3
		$hh = @HOUR
	WEnd
EndFunc

Func _copyFromServer($serverpath, $scriptpath)
	$i=1
	While $i=1
		$fileTime = FileGetTime($serverpath & $fileName,1,0)
		;If @YEAR = $fileTime[0] And @Mon = $fileTime[1] And @MDAY = $fileTime Then
			FileCopy($serverpath & "setup_rls.exe", $scriptpath & "setup_rls.exe", 1)
			$i=0
		;EndIf
	WEnd

EndFunc

Func _install ($fileName, $languageSelect, $welcomeText, $language)
	$issue = "sucess"
	;starting setup
	If TRun(@ScriptDir&"\" & $fileName,"Starting " & $fileName &" Failed") = "failed" Then
		;$issue = "failed"
	EndIf

	sleep(10000)

	;Choose New Installation or Update
	$windowtext = WinGetText("SYNCING.NET", "")
	$searchingfor = "SYNCING.NET is already installed."
	$result = StringInStr($windowtext,$searchingfor, 0)
	If $result > 0 Then
		;Choosing New Installation
		If WinWaitActivateClick("SYNCING.NET","",60,"Allready installed","[CLASS:Button; INSTANCE:2]") = "failed" Then
			;$issue = "failed"
		EndIf
	EndIf


	;installer language
	If WinWaitActivate($languageSelect,"",5,"Installer Language Timeout. Cant locate Installer Language Window") = "failed" Then
		;$issue = "failed"
	EndIf
	If WinActive($languageSelect,"")==0 Then
		ProcessClose($fileName)
		Failed("Installer Language Timeout. Cant locate Installer Language Window")
		Exit
	EndIf
	ControlCommand($languageSelect,"","[CLASS:ComboBox]","SelectString",$language)
	If @error Then
		ProcessClose($fileName)
		Failed("Cant Select Language "&$language&" at Installer Select Language Screen")
		;$issue = "failed"
	EndIf
	TControlClick($languageSelect,"","[CLASS:Button; INSTANCE:1]","Cant select OK at Select Installer Language Screen")


	;check language at Welcome screen
	If WinWaitActivate("SYNCING.NET",$welcomeText,60,"Language at welcome screen is not "&$language) = "failed" Then
		;$issue = "failed"
	EndIf

	;Welcome
	If WinWaitActivateClick("SYNCING.NET","",5,"Welcome to the SYNCING.NET 2.8 Setup Wizard","[CLASS:Button; INSTANCE:2]") = "failed" then
		;$issue = "failed"
	EndIf

	;License Agreement
	If WinWaitActivate("SYNCING.NET","",15,"License Agreement") = "failed" Then
		;$issue = "failed"
	EndIf
	ControlCommand("SYNCING.NET","","[CLASS:Button; INSTANCE:4]","Check","")
	If @error==1 Then
		Failed("Cant Select Checkbox at License Agreement")
		Exit
	EndIf
	If WinWaitActivateClick("SYNCING.NET","",5,"License Screen after checking box","[CLASS:Button; INSTANCE:2]") = "failed" Then
		;$issue = "failed"
	EndIf

	;Choose Install Location
	If WinWaitActivateClick("SYNCING.NET","",5,"Install Location Screen","[CLASS:Button; INSTANCE:2]") = "failed" Then
		;$issue = "failed"
	EndIf

	;.Net Update
	If WinWait("SYNCING.NET",".NET Framework",5)==1 Then
		If WinWaitActivateClick("SYNCING.NET",".NET",5,".Net Update","[Text:OK]") = "failed" Then
			;$issue = "failed"
		EndIf
	EndIf


	;Comlete
	sleep(60000)
	ControlClick("SYNCING.NET","completed","[CLASS:Button; INSTANCE:2]")

	;Firewall Sicherheitswarning
	;WinWaitActivateClick("Windows-Sicherheitswarnung","",30,"Firewall nichtmehr blockieren","[CLASS:Button; Instance:4")

	;SN Start
	;auf prozess warten? dafür window text im nächsten aufruf weglassen....

	;If WinWaitActivate("SYNCING.NET","User Account",120,"SN Startup Login Screen") = "failed" Then

	;EndIf

	return $issue
EndFunc

Func _useExistingAccount($userMail, $password)
	$issue = "sucess"
	If WinWaitActivateClick("SYNCING.NET","",10,"Choosing Existing or New Acc","[REGEXPCLASS:WindowsForms10.BUTTON;INSTANCE:1]") = "failed" Then
		$issue = "failed"
	EndIf
	If WinWaitActivateClick("SYNCING.NET","",10,"Choosing Existing or New Next","[REGEXPCLASS:WindowsForms10.BUTTON;INSTANCE:4]") = "failed" Then
		$issue = "failed"
	EndIf

	sleep(5000)

	;Enter Name and Pw
	If WriteToTextbox("SYNCING.NET","E-Mail","Mail","[REGEXPCLASS:EDIT;INSTANCE:2]",$userMail) = "failed" Then
		$issue = "failed"
	EndIf
	If WriteToTextbox("SYNCING.NET","","Password","[REGEXPCLASS:EDIT;INSTANCE:1]",$password) = "failed" Then
		$issue = "failed"
	EndIf

	If WinWaitActivateClick("SYNCING.NET","",5,"New Acc Next","[REGEXPCLASS:BUTTON;INSTANCE:2]") = "failed" Then
		$issue = "failed"
	EndIf



	;wait for FirstStartGuid
	sleep(5000)
	;WinWait("SYNCING.NET","")
	ControlFocus("SYNCING.NET","","WindowsForms10.Window.8.app6")
	WinWaitActivate("SYNCING.NET","First Start Guide",60,"First Start Guide")
	;Close Firststartguid
	ControlClick("SYNCING.NET","First Start Guid","[REGEXPCLASS:BUTTON;INSTANCE:1]")
	ControlClick("SYNCING.NET","First Start Guid","[REGEXPCLASS:BUTTON;INSTANCE:6]")

	;License Screen
	WinWaitActivateClick("SYNCING.NET","Your Edition",20,"License Screen, Not Now","[REGEXPCLASS:BUTTON;INSTANCE:2]")

	return $issue
EndFunc

Func _createSyncFolder()
		$issue = "sucess"
	;Create SanityFolder
		If WinWaitActivateClick("SYNCING.NET - ","",10,"Main, Files","[X:13;Y:85]") = "failed" Then
			$issue = "failed"
		EndIf

		If WinWaitActivate("SYNCING.NET","Provide a name",10,"Fileshare naming") = "failed" Then
			$issue = "failed"
		EndIf

		If WriteToTextbox("SYNCING.NET","Provide a name","FS Name","[REGEXPCLASS:EDIT;INSTANCE:1]","SanitySyncFolder") = "failed" Then
			$issue = "failed"
		EndIf

		If WinWaitActivateClick("SYNCING.NET","Provide a name",5,"Naming FS, Next","[REGEXPCLASS:BUTTON;INSTANCE:2]") = "failed" Then
			$issue = "failed"
		EndIf

		If WinWaitActivateClick("SYNCING.NET","Select the folder",5,"Select Folder, different, radio Button","[REGEXPCLASS:BUTTON;INSTANCE:2]") = "failed" Then
			$issue = "failed"
		EndIf

		ControlSetText("SYNCING.NET","","[REGEXPCLASS:EDIT;INSTANCE:1]",$fsPath)

		If WinWaitActivateClick("SYNCING.NET","Select the folder",5,"Select Folder, Next","[REGEXPCLASS:BUTTON;INSTANCE:5]") = "failed" Then
			$issue = "failed"
		EndIf

		If WinWaitActive("Attention!","",3)<>0 Then
			If ControlClick("Attention!","","[CLASS:Button; INSTANCE:1]")==0 Then
				Failed("Cant Click Yes at Attention! Window")
				Exit
			EndIf
		EndIf

		;Invite other User per E - Mail
			;WinWaitActivateClick("SYNCING.NET","Invite other",5,"Invite other, checkbox","[REGEXPCLASS:BUTTON;INSTANCE:1]")

			;ControlSetText("SYNCING.NET","","[REGEXPCLASS:EDIT;INSTANCE:2]","autotester2@syncing.net")


		IF WinWaitActivateClick("SYNCING.NET","Invite other",5,"Invite other, Next","[REGEXPCLASS:BUTTON;INSTANCE:3]") = "failed" Then
			$issue = "failed"
		EndIf

		If WinWaitActivateClick("SYNCING.NET","successfull",5,"successfull, Finish","[REGEXPCLASS:BUTTON;INSTANCE:2]") = "failed" Then
			$issue = "failed"
		EndIf
		Return $issue
EndFunc

Func _syncFiles ($datapath,$fsPath)
	$issue = "sucess"
	;Erzeugt im FS 10 mal 100MB große Dateien
	$t=1
	while $t<11
			If FileCopy($datapath & $t &"dummy100MB.dummy", $fsPath & $t &"dummyPeerA.dummy") = 0 Then
				$issue = "failed"
				$t = 10
			EndIf
			$t=$t+1
	WEnd
	Return $issue
EndFunc

Func _deleteSyncFiles($fsPath)
	$issue = "sucess"
	;Prüft ob Peer B die Dateien umbenannt hat und löscht diese
	For $j=1 to 10
		$exists=0
		While $exists == 0
			$exists = FileExists($fsPath & $j &"dummyPeerB.dummy")
			If $exists == 1 Then
				FileDelete($fsPath & $j & "dummyPeerB.dummy")
			EndIf
		WEnd
	Next
	Return $issue
EndFunc

Func _deleteSyncFolder()
	$issue = "sucess"
	;Löscht das angelegte Sync Folder
	;Markiert ersten Sync Folder
	;WinWait ("SYNCING.NET - autotester2@syncing.net", "")
	If WinActivate("Syncing.Net - autotester2@syncing.net") = "failed" Then
		$issue = "failed"
	EndIf
	ControlFocus ("SYNCING.NET", "", "WindowsForms10.Window.8.app.0.33c0d9d")
	ControlClick ("SYNCING.NET", "", "WindowsForms10.Window.8.app.0.33c0d9d", "left", 1, 28, 14)
	Sleep(5000)
	Send("{del}")
	sleep (5000)

		WinActivate("Delete Sync Folder?")

		;Prüft ob Auswahl "auswählen für alle Peers" aufgeht
		$windowtext = WinGetText("SYNCING.NET", "")
			;MsgBox(4096,"gelesener text", $windowtext)
		$searchingfor = "For all members"
		$result = StringInStr($windowtext,$searchingfor, 0)
			;MsgBox(4096,"gelesener text", $result)
		If  $result > 0 Then
			ControlClick ("SYNCING.NET","","WindowsForms10.BUTTON.app63")
			;sleep(5000)
			;bestätigen
			ControlClick ("SYNCING.NET","","WindowsForms10.BUTTON.app62")
			sleep(30000)
		Else
			ControlClick("Delete Sync folder?","","WindowsForms10.BUTTON.app.0.33c0d9d")
		EndIf
		Return $issue
EndFunc


Func _sendMail()
	$oOutlook = _OutlookOpen()
	_OutlookSendMail($oOutlook, "developer@syncing.net","riess@syncing.net","", "Exporting Times", "Test Results for Export","",$olFormatHTML,"","")
EndFunc

Func _copyBuildToArchive($fileName)
	If DirCreate($archivepath & @YEAR&@MON&@MDAY) = 1 Then
		FileCopy($scriptpath & $fileName, $archivepath& @YEAR&@MON&@MDAY)
	Else
		_writeToLog ("Error","Peer A: Can't write to Archive")
	EndIf
EndFunc

Func _writeToLog($result,$message)
	Response($result,$message,$logPeerA)
EndFunc
