using Perforce.P4;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.Diagnostics;
namespace p4api.net.unit.test
{
///
///This is a test class for ConnectionTest and is intended
///to contain all ConnectionTest Unit Tests
///
[TestClass()]
public class ConnectionTest
{
String TestDir = "c:\\MyTestDir";
private TestContext testContextInstance;
///
///Gets or sets the test context which provides
///information about and functionality for the current test run.
///
public TestContext TestContext
{
get
{
return testContextInstance;
}
set
{
testContextInstance = value;
}
}
#region Additional test attributes
//
//You can use the following additional attributes as you write your tests:
//
//Use ClassInitialize to run code before running the first test in the class
//[ClassInitialize()]
//public static void MyClassInitialize(TestContext testContext)
//{
//}
//
//Use ClassCleanup to run code after all tests in a class have run
//[ClassCleanup()]
//public static void MyClassCleanup()
//{
//}
//
//Use TestInitialize to run code before running each test
//[TestInitialize()]
//public void MyTestInitialize()
//{
//}
//
//Use TestCleanup to run code after each test has run
//[TestCleanup()]
//public void MyTestCleanup()
//{
//}
//
#endregion
///
///A test for Connect
///
[TestMethod()]
public void ConnectTest()
{
bool unicode = false;
string uri = "localhost:6666";
string user = "admin";
string pass = string.Empty;
string ws_client = "admin_space";
for( int i = 0; i < 2; i++ ) // run once for ascii, once for unicode
{
Process p4d = Utilities.DeployP4TestServer( TestDir, unicode );
Server server = new Server(new ServerAddress(uri));
try
{
using(Connection target= new Connection (server))
{
target.UserName = user;
target.Client = new Client();
target.Client.Name = ws_client;
Assert.AreEqual (target.Status,ConnectionStatus.Disconnected);
Assert.IsTrue (target.Connect(null));
Assert.AreEqual (target.Status,ConnectionStatus.Connected);
}
}
finally
{
Utilities.RemoveTestServer( p4d, TestDir );
}
unicode = !unicode;
}
}
///
///A test for Connect
///
[TestMethod()]
public void ConnectBadTest()
{
bool unicode = false;
string uri = "locadhost:77777";
string user = "admin";
string pass = string.Empty;
string ws_client = "admin_space";
for (int i = 0; i < 2; i++) // run once for ascii, once for unicode
{
Process p4d = Utilities.DeployP4TestServer(TestDir, unicode);
Server server = new Server(new ServerAddress(uri));
try
{
using (Connection target = new Connection(server))
{
Assert.AreEqual(target.Status, ConnectionStatus.Disconnected);
Assert.AreEqual(target.Server.State, ServerState.Unknown);
try
{
Assert.IsFalse(target.Connect(null));
}
catch
{
}
Assert.AreEqual(target.Server.State, ServerState.Offline);
Assert.AreEqual(target.Status, ConnectionStatus.Disconnected);
}
}
finally
{
Utilities.RemoveTestServer(p4d, TestDir);
}
unicode = !unicode;
}
}
///
///A test for Disconnect
///
[TestMethod()]
public void DisconnectTest()
{
bool unicode = false;
string uri = "localhost:6666";
string user = "admin";
string pass = string.Empty;
string ws_client = "admin_space";
for (int i = 0; i < 2; i++) // run once for ascii, once for unicode
{
Process p4d = Utilities.DeployP4TestServer(TestDir, unicode);
Server server = new Server(new ServerAddress(uri));
try
{
using (Connection target = new Connection(server))
{
target.UserName = user;
target.Client = new Client();
target.Client.Name = ws_client;
Assert.AreEqual(target.Status, ConnectionStatus.Disconnected);
Assert.AreEqual(target.Server.State, ServerState.Unknown);
Assert.IsTrue(target.Connect(null));
Assert.AreEqual(target.Server.State, ServerState.Online);
Assert.AreEqual(target.Status, ConnectionStatus.Connected);
Assert.IsTrue(target.Disconnect(null));
Assert.AreEqual(target.Status, ConnectionStatus.Disconnected);
Assert.IsFalse(target.Disconnect(null));
}
}
finally
{
Utilities.RemoveTestServer(p4d, TestDir);
}
unicode = !unicode;
}
}
///
///A test for Client
///
[TestMethod()]
public void ClientTest()
{
bool unicode = false;
string uri = "localhost:6666";
string user = "admin";
string pass = string.Empty;
string ws_client = "admin_space";
for (int i = 0; i < 2; i++) // run once for ascii, once for unicode
{
Process p4d = Utilities.DeployP4TestServer(TestDir, unicode);
Server server = new Server(new ServerAddress(uri));
try
{
Repository rep = new Repository(server);
using (Connection con = rep.Connection)
{
con.UserName = user;
con.Client = new Client();
con.Client.Name = ws_client;
Assert.AreEqual(con.Status, ConnectionStatus.Disconnected);
Assert.AreEqual(con.Server.State, ServerState.Unknown);
Assert.IsTrue(con.Connect(null));
Assert.AreEqual(con.Server.State, ServerState.Online);
Assert.AreEqual(con.Status, ConnectionStatus.Connected);
P4Command syncCmd = new P4Command(con._p4server, "sync", false);
P4CommandResult r = syncCmd.Run();
Assert.AreEqual(r.ErrorList[0].ErrorMessage, "File(s) up-to-date.\n");
}
//rep = new Repository(server);
using (Connection con = rep.Connection)
{
con.UserName = user;
con.Client = new Client();
ws_client = "ws_bad_client";
con.Client.Name = ws_client;
bool failed = false;
Assert.IsTrue(con.Connect(null));
try
{
P4Command syncCmd = new P4Command(con._p4server, "sync", false);
P4CommandResult r = syncCmd.Run();
}
catch
{
failed = true;
}
Assert.IsTrue(failed);
ws_client = "admin_space";
}
}
finally
{
Utilities.RemoveTestServer(p4d, TestDir);
}
unicode = !unicode;
}
}
///
///A test for Login
///
[TestMethod()]
public void LoginTest()
{
bool unicode = false;
string uri = "localhost:6666";
string user = "admin";
string pass = "pass";
string ws_client = "admin_space";
for (int i = 0; i < 3; i++) // run once for ascii, once for unicode, once for the security level 3 server
{
String zippedFile = "a.exe";
if (i == 1)
{
zippedFile = "u.exe";
}
if (i == 2)
{
zippedFile = "s3.exe";
pass = "Password";
}
Process p4d = Utilities.DeployP4TestServer(TestDir, 10, zippedFile);
Server server = new Server(new ServerAddress(uri));
try
{
using (Connection target = new Connection(server))
{
Assert.AreEqual(target.Status, ConnectionStatus.Disconnected);
Assert.AreEqual(target.Server.State, ServerState.Unknown);
target.UserName = user;
Options options = new Options();
options["Password"] = pass;
Assert.IsTrue(target.Connect(options));
Assert.AreEqual(target.Server.State, ServerState.Online);
Assert.AreEqual(target.Status, ConnectionStatus.Connected);
Credential cred = target.Login(pass, null, null);
Assert.IsNotNull(cred);
Assert.AreEqual(user, cred.UserName);
Assert.IsTrue(target.Logout(null));
Assert.IsTrue(target.Disconnect(null));
Assert.AreEqual(target.Status, ConnectionStatus.Disconnected);
Assert.IsFalse(target.Disconnect(null));
}
}
finally
{
Utilities.RemoveTestServer(p4d, TestDir);
}
unicode = !unicode;
}
}
///
///Another test for Login
///
[TestMethod()]
public void LoginTest2()
{
bool unicode = false;
string uri = "localhost:6666";
string user = "admin";
string pass = "pass";
string ws_client = "alex_space";
string user2 = "Alex";
for (int i = 0; i < 3; i++) // run once for ascii, once for unicode, once for the security level 3 server
{
String zippedFile = "a.exe";
if (i == 1)
{
zippedFile = "u.exe";
user2 = "Алексей";
}
if (i == 2)
{
zippedFile = "s3.exe";
user2 = "Alex";
pass = "Password";
}
Process p4d = Utilities.DeployP4TestServer(TestDir, 10, zippedFile);
Server server = new Server(new ServerAddress(uri));
try
{
using (Connection target = new Connection(server))
{
Assert.AreEqual(target.Status, ConnectionStatus.Disconnected);
Assert.AreEqual(target.Server.State, ServerState.Unknown);
target.UserName = user;
Options options = new Options();
options["Password"] = pass;
Assert.IsTrue(target.Connect(options));
Assert.AreEqual(target.Server.State, ServerState.Online);
Assert.AreEqual(target.Status, ConnectionStatus.Connected);
// login as admin
Credential cred = target.Login(pass, null, null);
Assert.IsNotNull(cred);
Assert.AreEqual(user, cred.UserName);
target.Logout(null);
target.UserName = user2;
options = new Options();
options["Password"] = pass;
Assert.IsTrue(target.Connect(options));
Assert.AreEqual(target.Server.State, ServerState.Online);
Assert.AreEqual(target.Status, ConnectionStatus.Connected);
// login as alex/alexei
Credential cred2 = target.Login(pass, null, null);
Assert.IsNotNull(cred2);
Assert.AreEqual(user2, cred2.UserName);
if (zippedFile != "s3.exe")
{ Assert.IsTrue(target.Logout(null)); }
Assert.IsTrue(target.Disconnect(null));
Assert.AreEqual(target.Status, ConnectionStatus.Disconnected);
Assert.IsFalse(target.Disconnect(null));
}
}
finally
{
Utilities.RemoveTestServer(p4d, TestDir);
}
unicode = !unicode;
}
}
///
///Another test for Login
///
[TestMethod()]
public void TrustTest()
{
bool unicode = false;
string uri = "localhost:6666";
// string user = "admin";
// string pass = "pass";
// string ws_client = "alex_space";
for (int i = 0; i < 2; i++) // run once for ascii, once for unicode
{
String zippedFile = "a.exe";
if (i == 1)
{
zippedFile = "u.exe";
}
Process p4d = Utilities.DeployP4TestServer(TestDir, 10, zippedFile);
Server server = new Server(new ServerAddress(uri));
try
{
using (Connection target = new Connection(server))
{
Assert.AreEqual(target.Status, ConnectionStatus.Disconnected);
Assert.AreEqual(target.Server.State, ServerState.Unknown);
// target.UserName = user;
Assert.IsTrue(target.Connect(null));
Assert.AreEqual(target.Server.State, ServerState.Online);
Assert.AreEqual(target.Status, ConnectionStatus.Connected);
TrustCmdOptions options = new TrustCmdOptions(TrustCmdFlags.AutoAccept);
Assert.IsTrue(target.Trust(options, null));
Assert.IsTrue(target.Disconnect(null));
}
}
finally
{
Utilities.RemoveTestServer(p4d, TestDir);
}
unicode = !unicode;
}
}
///
///Another test for Login
///
[TestMethod()]
public void CharacterSetNameTest()
{
bool unicode = false;
string uri = "localhost:6666";
// string user = "admin";
// string pass = "pass";
// string ws_client = "alex_space";
for (int i = 0; i < 2; i++) // run once for ascii, once for unicode
{
String zippedFile = "a.exe";
if (i == 1)
{
zippedFile = "u.exe";
}
Process p4d = Utilities.DeployP4TestServer(TestDir, 10, zippedFile);
Server server = new Server(new ServerAddress(uri));
try
{
using (Connection target = new Connection(server))
{
Assert.AreEqual(target.Status, ConnectionStatus.Disconnected);
Assert.AreEqual(target.Server.State, ServerState.Unknown);
// target.UserName = user;
Assert.IsTrue(target.Connect(null));
Assert.AreEqual(target.Server.State, ServerState.Online);
Assert.AreEqual(target.Status, ConnectionStatus.Connected);
string actual = target.CharacterSetName;
string p4charset = Environment.GetEnvironmentVariable("P4CHARSET");
if (p4charset != null)
{
Assert.AreEqual(p4charset, actual);
}
else if (unicode)
{
// should have been automatically detected if the server is
// unicode based on this systems codepage
Assert.IsFalse(string.IsNullOrEmpty(actual) || (actual == "none"));
}
else
{
// no charset needed on on non unicode servers
Assert.IsTrue(string.IsNullOrEmpty(actual) || (actual == "none"));
}
Assert.IsTrue(target.Disconnect(null));
}
}
finally
{
Utilities.RemoveTestServer(p4d, TestDir);
}
unicode = !unicode;
}
}
///
///A test for SetPassword
///
[TestMethod()]
public void SetPasswordTest()
{
bool unicode = false;
string uri = "localhost:6666";
string user = "admin";
string pass = "pass";
string ws_client = "admin_space";
for (int i = 0; i < 3; i++) // run once for ascii, once for unicode, once for the security level 3 server
{
String zippedFile = "a.exe";
if (i == 1)
{
zippedFile = "u.exe";
}
if (i == 2)
{
zippedFile = "s3.exe";
pass = "Password";
}
Process p4d = Utilities.DeployP4TestServer(TestDir, 10, zippedFile);
Server server = new Server(new ServerAddress(uri));
try
{
using (Connection target = new Connection(server))
{
Assert.AreEqual(target.Status, ConnectionStatus.Disconnected);
Assert.AreEqual(target.Server.State, ServerState.Unknown);
target.UserName = user;
Options options = new Options();
options["Password"] = pass;
Assert.IsTrue(target.Connect(options));
Assert.AreEqual(target.Server.State, ServerState.Online);
Assert.AreEqual(target.Status, ConnectionStatus.Connected);
Credential cred = target.Login(pass, null, null);
Assert.IsNotNull(cred);
Assert.AreEqual(user, cred.UserName);
Assert.IsTrue(target.SetPassword(pass, pass + "2"));
Assert.IsTrue(target.Logout(null));
Assert.IsTrue(target.Disconnect(null));
Assert.AreEqual(target.Status, ConnectionStatus.Disconnected);
Assert.IsFalse(target.Disconnect(null));
}
}
finally
{
Utilities.RemoveTestServer(p4d, TestDir);
}
unicode = !unicode;
}
}
}
}