using Perforce.P4; 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 DenisConnectTest() //{ // bool unicode = false; // string uri = "ssl:qaplay:4999"; // string user = "dbarbee_pw"; // string pass = "password"; // string ws_client = ""; // var nl = System.Environment.NewLine; // //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 (Repository target = new Repository(server)) // { // var cx = target.Connection; // cx.UserName = user; // System.Diagnostics.Trace.WriteLine("(1) Username: " + cx.UserName); // cx.SetClient(ws_client); // System.Diagnostics.Trace.WriteLine("(2) Username: " + cx.UserName); // cx.Connect(null); // System.Diagnostics.Trace.WriteLine("(3) Username: " + cx.UserName); // cx.Disconnect(); // System.Diagnostics.Trace.WriteLine("(4) Username: " + cx.UserName); // cx.Connect(new Options()); // Credential cred = cx.Login(pass); // System.Diagnostics.Trace.WriteLine("Credential Username: " + cred.UserName); // System.Diagnostics.Trace.WriteLine("Credential Expires: " + cred.Expires.ToShortDateString() + " " +cred.Expires.ToShortTimeString()); // Assert.AreEqual(cx.Status, ConnectionStatus.Connected); // Assert.AreEqual(cx.UserName, user); // } // } // finally // { // //Utilities.RemoveTestServer(p4d, TestDir); // } // unicode = !unicode; // //} //} /// ///A test for Connect /// [TestMethod()] public void ConnectUsingP4ConfigTest() { bool unicode = false; //string uri = "localhost:6666"; //string user = "admin"; //string pass = string.Empty; //string ws_client = "admin_space"; string oldConfig = P4Server.Get("P4CONFIG"); for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, unicode); // write a config fil in the workspace root string expected = "C:\\MyTestDir\\admin_space\\myP4Config.txt"; P4Server.Set("P4CONFIG", "myP4Config.txt"); try { if (System.IO.File.Exists(expected)) { System.IO.File.Delete(expected); } using (System.IO.StreamWriter sw = new System.IO.StreamWriter(expected)) { sw.WriteLine("P4PORT=localhost:6666"); sw.WriteLine("P4USER=admin"); sw.WriteLine("P4CLIENT=admin_space"); } string actual = P4Server.GetConfig("C:\\MyTestDir\\admin_space\\MyCode"); Assert.AreEqual(actual, expected); } catch { Assert.Fail("Could not write config file"); } Server server = new Server(null); try { using (Connection target = new Connection(null)) { Assert.AreEqual(target.Status, ConnectionStatus.Disconnected); Options opts = new Perforce.P4.Options(); opts["cwd"] = "C:\\MyTestDir\\admin_space\\MyCode"; Assert.IsTrue(target.Connect(opts)); Assert.AreEqual(ConnectionStatus.Connected, target.Status); if (unicode) Assert.IsTrue(target._p4server.UseUnicode, "Unicode server detected as not supporting Unicode"); else Assert.IsFalse(target._p4server.UseUnicode, "Non Unicode server detected as supporting Unicode"); string actual = target._p4server.Config; Assert.AreEqual(expected, actual, true); // ignore case Assert.AreEqual("admin", target._p4server.User); Assert.AreEqual("admin_space", target._p4server.Client); Assert.AreEqual("localhost:6666", target._p4server.Port); } } finally { Utilities.RemoveTestServer(p4d, TestDir); P4Server.Set("P4CONFIG", oldConfig); } unicode = !unicode; } } /// ///A test for Connect /// [TestMethod()] public void ConnectUsingP4EnviroTest() { bool unicode = false; //string uri = "localhost:6666"; //string user = "admin"; //string pass = string.Empty; //string ws_client = "admin_space"; string oldConfig = P4Server.Get("P4CONFIG"); P4Server.Set("P4CONFIG", null); for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, unicode); // write a config fil in the workspace root try { Environment.SetEnvironmentVariable("P4PORT", "localhost:6666"); Environment.SetEnvironmentVariable("P4USER", "admin"); Environment.SetEnvironmentVariable("P4CLIENT", "admin_space"); } catch { Assert.Fail("Could not P4 Environment"); } Server server = new Server(null); try { using (Connection target = new Connection(null)) { Assert.AreEqual(target.Status, ConnectionStatus.Disconnected); Options opts = new Perforce.P4.Options(); opts["cwd"] = "C:\\MyTestDir\\admin_space\\MyCode"; Assert.IsTrue(target.Connect(opts)); Assert.AreEqual(target.Status, ConnectionStatus.Connected); if (unicode) Assert.IsTrue(target._p4server.UseUnicode, "Unicode server detected as not supporting Unicode"); else Assert.IsFalse(target._p4server.UseUnicode, "Non Unicode server detected as supporting Unicode"); Assert.AreEqual(target._p4server.User, "admin"); Assert.AreEqual(target._p4server.Client, "admin_space"); Assert.AreEqual(target._p4server.Port, "localhost:6666"); string actual = target._p4server.Config; Assert.AreEqual(actual, "noconfig"); } } finally { P4Server.Set("P4CONFIG", oldConfig); Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } private static bool IsHexDigit(char c) { if (char.IsDigit(c)) { return true; } switch (c) { case 'A': case 'a': case 'B': case 'b': case 'C': case 'c': case 'D': case 'd': case 'E': case 'e': case 'F': case 'f': return true; } return false; } /// /// A test for connecting to IPv6 server address /// //[TestMethod()] //public void ConnectIPv6Test() //{ // bool unicode = false; // string tcp = "tcp6"; // string uri = tcp + ":::1: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.DeployIPv6P4TestServer(TestDir, tcp, 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 connecting to IPv6 or 4 server address /// //[TestMethod()] //public void ConnectIPv6or4Test() //{ // bool unicode = false; // string tcp = "tcp64"; // string uri = tcp + ":::1: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.DeployIPv6P4TestServer(TestDir, tcp, 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 connecting to IPv4 or 6 server address /// //[TestMethod()] //public void ConnectIPv4or6Test() //{ // bool unicode = false; // string tcp = "tcp46"; // string uri = tcp + ":::1: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.DeployIPv6P4TestServer(TestDir, tcp, 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 ConnectSSL /// //[TestMethod()] //public void ConnectSSLTest() //{ // bool unicode = false; // string uri = "ssl: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.DeploySSLP4TestServer(TestDir, unicode); // Server server = new Server(new ServerAddress(uri)); // try // { // using (Connection target = new Connection(server)) // { // string trustFlag = "-i"; // string fingerprint = string.Empty; // target.UserName = user; // target.Client = new Client(); // target.Client.Name = ws_client; // Assert.AreEqual(target.Status, ConnectionStatus.Disconnected); // try // { // target.Connect(null); // } // catch(Exception ex) // { // string[] sslMsg = ex.Message.Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries); // for (int idx = 1; idx < sslMsg.Length; idx++) // { // if (string.IsNullOrEmpty(sslMsg[idx]) == false) // { // if (IsHexDigit(sslMsg[idx][0]) && IsHexDigit(sslMsg[idx][1])) // { // fingerprint = sslMsg[idx]; // break; // } // } // } // } // Assert.IsTrue(target.TrustAndConnect(null, trustFlag, fingerprint)); // Assert.AreEqual(target.Status, ConnectionStatus.Connected); // // check to see if server metadata was retrieved // Assert.IsNotNull(target.Server.Metadata); // } // } // finally // { // Utilities.RemoveTestServer(p4d, TestDir); // } // unicode = !unicode; // } //} /// ///A test for Connect and check server version /// [TestMethod()] public void ConnectTestCheckServerVersion() { 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.Connect(null); if (target._p4server.ApiLevel==28) { Assert.AreEqual(target.Server.Metadata.Version.Major, "2009.2"); } target.Connect(null); if (target._p4server.ApiLevel == 29) { Assert.AreEqual(target.Server.Metadata.Version.Major, "2010.1"); } target.Connect(null); if (target._p4server.ApiLevel == 30) { Assert.AreEqual(target.Server.Metadata.Version.Major, "2010.2"); } target.Connect(null); if (target._p4server.ApiLevel == 31) { Assert.AreEqual(target.Server.Metadata.Version.Major, "2011.1"); } target.Connect(null); if (target._p4server.ApiLevel == 32) { Assert.AreEqual(target.Server.Metadata.Version.Major, "2011.2"); } target.Connect(null); if (target._p4server.ApiLevel == 33) { //Assert.AreEqual(target.Server.Metadata.Version.Major, //"2012.1"); } target.Connect(null); if (target._p4server.ApiLevel == 34) { Assert.AreEqual(target.Server.Metadata.Version.Major, "2012.2"); } } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for Connect /// [TestMethod()] public void ContinualConnectTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; Random rdm = new Random(); int cointoss = rdm.Next(0, 1); if (cointoss != 0) { unicode = true; } for (int i = 0; i < 1; i++) // run only once for ascii or unicode (randomly), it's a long test { Process p4d = Utilities.DeployP4TestServer(TestDir, unicode); Server server = new Server(new ServerAddress(uri)); try { DateTime start = DateTime.Now; while (true) { using (Connection target = new Connection(server)) { string[] args = new string[] { "-m", "1", "//depot/*." }; uint cmdID = 7; using (P4Server _P4Server = new P4Server("localhost:6666", null, null, null)) { string val = P4Server.Get("P4IGNORE"); int _p4IgnoreSet = string.IsNullOrEmpty(val) ? 0 : 1; 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); Assert.IsTrue(target._p4server.RunCommand("fstat", cmdID, false, args, args.Length)); } target._p4server.ReleaseConnection(cmdID); Assert.IsTrue(target._p4server.RunCommand("fstat", ++cmdID, false, args, args.Length)); target._p4server.ReleaseConnection(cmdID); Assert.IsTrue(target.ApiLevel > 0); int delay = rdm.Next(0, 11); if (delay > 0) { System.Threading.Thread.Sleep(TimeSpan.FromSeconds(delay)); } } if ((DateTime.Now - start) > TimeSpan.FromSeconds(158)) break; } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for Connect /// [TestMethod()] public void ConnectAndRunCommandsTest() { 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); string[] args = new string[] {"-m", "1", "//depot/*."}; uint cmdID = 7; Assert.IsTrue(target._p4server.RunCommand("fstat", cmdID, false, args, args.Length)); target._p4server.ReleaseConnection(cmdID); Assert.IsTrue(target._p4server.RunCommand("fstat", ++cmdID, false, args, args.Length)); target._p4server.ReleaseConnection(cmdID); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } #if _TEST_P4AUTH /// ///A test for Connect using a bad auth server /// [TestMethod()] public void ConnectWithBadP4AuthTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; for (int i = 0; i < 3; i++) // run once for ascii, once for unicode { 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, "P4AuthTest.bat"); 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); try { Assert.IsFalse(target.Connect(null)); } catch (Exception ex) { Assert.IsTrue(ex is P4Exception); } Assert.AreNotEqual(target.Status, ConnectionStatus.Connected); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } #endif /// ///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 (AssertFailedException) { throw; } catch (P4Exception ex) { Trace.WriteLine(string.Format("ConnectBadTest throw an exception: {0}", ex.Message)); Trace.WriteLine(string.Format("Stacktrace:\r\n{0}", ex.StackTrace)); } catch (Exception ex) { Trace.WriteLine(string.Format("ConnectBadTest throw an exception: {0}", ex.Message)); Trace.WriteLine(string.Format("Stacktrace:\r\n{0}", ex.StackTrace)); } 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"); } 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; } } /// ///A test for Login /// [TestMethod()] public void LoginTest3() { bool unicode = false; string uri = "127.0.0.1:6666"; string user = "admin"; string pass = "pass"; string ws_client = "admin_space"; for (int i = 2; 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,true);//,true); Assert.IsNotNull(cred); Assert.AreEqual(user, cred.UserName); Assert.IsTrue(target.Logout(null)); cred = target.Login(pass,true); //,true); 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; } } /// ///A test for Login with null Client /// [TestMethod()] public void LoginTestWithNullClient() { 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); // set the connection Client to null target.Client = null; Credential cred = target.Login(pass); // even if Client is null, credential should not be returned // as a null Assert.IsNotNull(cred); } } 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); 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"; 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); Assert.IsTrue(target.Connect(null)); Assert.AreEqual(target.Server.State, ServerState.Online); Assert.AreEqual(target.Status, ConnectionStatus.Connected); string actual = target.CharacterSetName; string p4charset = target.GetP4EnvironmentVar("P4CHARSET"); if ((p4charset != null) && (p4charset != "none")) { 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; } } /// ///A test for GetExistingTicket /// [TestMethod()] public void GetTicketFileTest() { string actual = P4Server.GetTicketFile(); Assert.IsTrue(actual.Contains("p4tickets.txt")); } /// ///A test for GetExistingTicket /// [TestMethod()] public void GetExistingTicketTest() { #if DEBUG_GET_TICKET bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = "pass"; string ws_client = "admin_space"; // run once for the security level 3 server, user has a password and a ticket will get generated for (int i = 2; i < 3; i++) { 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); string ticket = target.GetExistingTicket(user); Assert.IsNotNull(ticket); 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; } #endif } } }