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