175 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
			
		
		
	
	
			175 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
import haxe.unit.*;
 | 
						|
import haxe.*;
 | 
						|
import haxe.io.*;
 | 
						|
import sys.*;
 | 
						|
import sys.io.*;
 | 
						|
import haxelib.*;
 | 
						|
using StringTools;
 | 
						|
using IntegrationTests;
 | 
						|
 | 
						|
class IntegrationTests extends TestBase {
 | 
						|
	var haxelibBin:String = Path.join([Sys.getCwd(), "run.n"]);
 | 
						|
	public var server(default, null):String = switch (Sys.getEnv("HAXELIB_SERVER")) {
 | 
						|
		case null:
 | 
						|
			"localhost";
 | 
						|
		case url:
 | 
						|
			url;
 | 
						|
	};
 | 
						|
	public var serverPort(default, null) = switch (Sys.getEnv("HAXELIB_SERVER_PORT")) {
 | 
						|
		case null:
 | 
						|
			2000;
 | 
						|
		case port:
 | 
						|
			Std.parseInt(port);
 | 
						|
	};
 | 
						|
	public var serverUrl(get, null):String;
 | 
						|
	function get_serverUrl() return serverUrl != null ? serverUrl : serverUrl = 'http://${server}:${serverPort}/';
 | 
						|
 | 
						|
	static var originalRepo(default, never) = {
 | 
						|
		var p = new Process("haxelib", ["config"]);
 | 
						|
		var repo = Path.normalize(p.stdout.readLine());
 | 
						|
		p.close();
 | 
						|
		repo;
 | 
						|
	};
 | 
						|
	static public var repo(default, never) = "repo_integration_tests";
 | 
						|
	static public var bar(default, never) = {
 | 
						|
		user: "Bar",
 | 
						|
		email: "bar@haxe.org",
 | 
						|
		fullname: "Bar",
 | 
						|
		pw: "barpassword",
 | 
						|
	};
 | 
						|
	static public var foo(default, never) = {
 | 
						|
		user: "Foo",
 | 
						|
		email: "foo@haxe.org",
 | 
						|
		fullname: "Foo",
 | 
						|
		pw: "foopassword",
 | 
						|
	};
 | 
						|
	public var clientVer(get, null):SemVer;
 | 
						|
	var clientVer_inited = false;
 | 
						|
	function get_clientVer() {
 | 
						|
		return if (clientVer_inited)
 | 
						|
			clientVer;
 | 
						|
		else {
 | 
						|
			clientVer = {
 | 
						|
				var r = haxelib(["version"]).result();
 | 
						|
				if (r.code == 0)
 | 
						|
					SemVer.ofString(r.out.trim());
 | 
						|
				else if (r.out.indexOf("3.1.0-rc.4") >= 0)
 | 
						|
					SemVer.ofString("3.1.0-rc.4");
 | 
						|
				else
 | 
						|
					throw "unknown version";
 | 
						|
			};
 | 
						|
			clientVer_inited = true;
 | 
						|
			clientVer;
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	function haxelib(args:Array<String>, ?input:String):Process {
 | 
						|
		var p = #if system_haxelib
 | 
						|
			new Process("haxelib", ["-R", serverUrl].concat(args));
 | 
						|
		#else
 | 
						|
			new Process("neko", [haxelibBin, "-R", serverUrl].concat(args));
 | 
						|
		#end
 | 
						|
 | 
						|
		if (input != null) {
 | 
						|
			p.stdin.writeString(input);
 | 
						|
			p.stdin.close();
 | 
						|
		}
 | 
						|
 | 
						|
		return p;
 | 
						|
	}
 | 
						|
 | 
						|
	function assertSuccess(r:{out:String, err:String, code:Int}, ?pos:haxe.PosInfos):Void {
 | 
						|
		if (r.code != 0) {
 | 
						|
			throw r;
 | 
						|
		}
 | 
						|
		assertEquals(0, r.code, pos);
 | 
						|
	}
 | 
						|
 | 
						|
	function assertNoError(f:Void->Void):Void {
 | 
						|
		f();
 | 
						|
		assertTrue(true);
 | 
						|
	}
 | 
						|
 | 
						|
	var dbConfig:Dynamic = Json.parse(File.getContent("www/dbconfig.json"));
 | 
						|
	var dbCnx:sys.db.Connection;
 | 
						|
	function resetDB():Void {
 | 
						|
		var db = dbConfig.database;
 | 
						|
		dbCnx.request('DROP DATABASE IF EXISTS ${db};');
 | 
						|
		dbCnx.request('CREATE DATABASE ${db};');
 | 
						|
 | 
						|
		var filesPath = "www/files/3.0";
 | 
						|
		for (item in FileSystem.readDirectory(filesPath)) {
 | 
						|
			if (item.endsWith(".zip")) {
 | 
						|
				FileSystem.deleteFile(Path.join([filesPath, item]));
 | 
						|
			}
 | 
						|
		}
 | 
						|
		var tmpPath = "tmp";
 | 
						|
		for (item in FileSystem.readDirectory(filesPath)) {
 | 
						|
			if (item.endsWith(".tmp")) {
 | 
						|
				FileSystem.deleteFile(Path.join([tmpPath, item]));
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	override function setup():Void {
 | 
						|
		super.setup();
 | 
						|
 | 
						|
		dbCnx = sys.db.Mysql.connect({
 | 
						|
			user: dbConfig.user,
 | 
						|
			pass: dbConfig.pass,
 | 
						|
			host: server,
 | 
						|
			port: dbConfig.port,
 | 
						|
			database: dbConfig.database,
 | 
						|
		});
 | 
						|
		resetDB();
 | 
						|
 | 
						|
		deleteDirectory(repo);
 | 
						|
		haxelibSetup(repo);
 | 
						|
	}
 | 
						|
 | 
						|
	override function tearDown():Void {
 | 
						|
		haxelibSetup(originalRepo);
 | 
						|
		deleteDirectory(repo);
 | 
						|
 | 
						|
		resetDB();
 | 
						|
		dbCnx.close();
 | 
						|
 | 
						|
		super.tearDown();
 | 
						|
	}
 | 
						|
 | 
						|
	static public function result(p:Process):{out:String, err:String, code:Int} {
 | 
						|
		var out = p.stdout.readAll().toString();
 | 
						|
		var err = p.stderr.readAll().toString();
 | 
						|
		var code = p.exitCode();
 | 
						|
		p.close();
 | 
						|
		return {out:out, err:err, code:code};
 | 
						|
	}
 | 
						|
 | 
						|
	static public function haxelibSetup(path:String):Void {
 | 
						|
		var p = new Process("haxelib", ["setup", path]);
 | 
						|
		if (p.exitCode() != 0)
 | 
						|
			throw "unable to set haxelib repo to " + path;
 | 
						|
		p.close();
 | 
						|
	}
 | 
						|
 | 
						|
	static function main():Void {
 | 
						|
		var prevDir = Sys.getCwd();
 | 
						|
 | 
						|
		var runner = new TestRunner();
 | 
						|
		runner.add(new tests.integration.TestEmpty());
 | 
						|
		runner.add(new tests.integration.TestSimple());
 | 
						|
		runner.add(new tests.integration.TestUpgrade());
 | 
						|
		runner.add(new tests.integration.TestUpdate());
 | 
						|
		runner.add(new tests.integration.TestList());
 | 
						|
		runner.add(new tests.integration.TestSet());
 | 
						|
		runner.add(new tests.integration.TestInfo());
 | 
						|
		runner.add(new tests.integration.TestUser());
 | 
						|
		runner.add(new tests.integration.TestDev());
 | 
						|
		var success = runner.run();
 | 
						|
 | 
						|
		if (!success) {
 | 
						|
			Sys.exit(1);
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |