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