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);
 | |
| 		}
 | |
| 	}
 | |
| }
 |