using Perforce.P4; using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using System.Diagnostics; namespace p4api.net.unit.test { /// ///This is a test class for RepositoryTest and is intended ///to contain RepositoryTest Unit Tests /// public partial class RepositoryTest { /// ///A test for CreateJob /// [TestMethod()] public void CreateJobTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; string targetJob = "thenewjob"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 7, 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; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Job u = new Job(); u.Id = targetJob; u.Add("Status", "open"); u.Add("User", "admin"); u.Add("Description", "this is a test job"); Job newGuy = rep.CreateJob(u, null); Job equalJob = rep.GetJob("thenewjob"); Assert.IsNotNull(equalJob); Assert.AreEqual(equalJob.Id, newGuy.Id); u = new Job(); u.Id = "new"; u.Add("Status", "open"); u.Add("User", "admin"); u.Add("Description", "this is a test job"); newGuy = rep.CreateJob(u, null); equalJob = rep.GetJob(u.Id); Assert.IsNotNull(equalJob); Assert.AreEqual("job000002", newGuy.Id); u = new Job(); u.Id = "new"; u.Add("Status", "open"); u.Add("User", "admin"); u.Add("Description", "this is a test job"); newGuy = rep.CreateJob(u, new Options(JobCmdFlags.Input)); equalJob = rep.GetJob(u.Id); Assert.IsNotNull(equalJob); Assert.AreEqual("job000003", newGuy.Id); // test to confirm creating a new job without // specifying .Id will not fail if there is a // Job object in the spec u = new Job(); u.Add("Job", "targetJobWithoutId"); u.Add("Status", "open"); u.Add("User", "admin"); u.Add("Description", "this is a test job"); newGuy = rep.CreateJob(u, null); equalJob = rep.GetJob(u.Id); Assert.IsNotNull(equalJob); Assert.AreEqual("targetJobWithoutId", newGuy.Id); Job testJob = rep.GetJob(u.Id, null); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for UpdateJob /// [TestMethod()] public void UpdateJobTest() { 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, 7, 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; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Job fetchedJob = rep.GetJob("job000001"); fetchedJob["Description"] += "\n\tModified!"; rep.UpdateJob(fetchedJob); Job fetchedJob2 = rep.GetJob("job000001"); Assert.IsTrue(fetchedJob2["Description"].ToString().Contains("Modified!")); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for DeleteJob /// [TestMethod()] public void DeleteJobTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; string targetJob = "job000002"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 11, 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; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Job u = new Job(); u.Id = targetJob; IList u2 = rep.GetJobs(new Options(JobsCmdFlags.LongDescriptions, null, 5)); Assert.IsNotNull(u2); Assert.AreEqual(3, u2.Count); rep.DeleteJob(u, null); u2 = rep.GetJobs(new Options(JobsCmdFlags.LongDescriptions, null, 5)); Assert.IsNotNull(u2); Assert.AreEqual(2, u2.Count); u2 = rep.GetJobs(new Options(JobsCmdFlags.IncludeIntegratedFixes, null, 5)); Assert.IsNotNull(u2); Assert.AreEqual(2, u2.Count); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetJob /// [TestMethod()] public void GetJobTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; string targetJob = "job000001"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 6, 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; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); Job u = rep.GetJob(targetJob, null); Assert.IsNotNull(u); Assert.AreEqual(targetJob, u.Id); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for GetJobs /// [TestMethod()] public void GetJobsTest() { 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, 6, 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; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); FileSpec path = new FileSpec(new DepotPath(@"//depot/..."), null); IList u = rep.GetJobs((new Options(JobsCmdFlags.LongDescriptions, null, 2)),path); Assert.IsNotNull(u); Assert.AreEqual(1, u.Count); path = new FileSpec(new DepotPath(@"//depot/..."), null); string jobView = "Test job"; u = rep.GetJobs((new Options(JobsCmdFlags.LongDescriptions, jobView, 2)), path); Assert.IsNotNull(u); Assert.AreEqual(1, u.Count); jobView = "status=open"; u = rep.GetJobs((new Options(JobsCmdFlags.LongDescriptions, jobView, 100)), path); Assert.IsNotNull(u); Assert.AreEqual(1, u.Count); u = rep.GetJobs(new Options(JobsCmdFlags.IncludeIntegratedFixes, null, 5), path); Assert.IsNotNull(u); Assert.AreEqual(1, u.Count); } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for an invalid job name /// [TestMethod()] public void InvalidJobNameTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; string targetJob = "-1"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 11, 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; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); try { Job u = new Job(); u.Id = targetJob; Job job = rep.CreateJob(u, null); } catch (P4Exception e) { Assert.AreEqual(822153261, e.ErrorCode, "Error in job specification\nInitial dash character not allowed in '-1'."); } } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for an a job created without a required field /// [TestMethod()] public void IncompleteJobSpecTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; string targetJob = "testJob"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 11, 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; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); try { Job u = new Job(); u.Id = targetJob; u.Add("Status", "open"); u.Add("User", "admin"); Job job = rep.CreateJob(u, null); } catch (P4Exception e) { Assert.AreEqual(822153261, e.ErrorCode, "Error in job specification.\nMissing required field 'Description'.\n"); } try { Job u = new Job(); u.Id = targetJob; u.Add("Status", "open"); u.Add("Description", "this is a test job"); Job job = rep.CreateJob(u, null); } catch (P4Exception e) { Assert.AreEqual(822153261, e.ErrorCode, "Error in job specification.\nMissing required field 'User'.\n"); } try { Job u = new Job(); u.Id = targetJob; u.Add("Status", "open"); u.Add("User", "admin"); Job job = rep.CreateJob(u, null); } catch (P4Exception e) { Assert.AreEqual(822153261, e.ErrorCode, "Error in job specification.\nMissing required field 'Status'.\n"); } } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for a deleting a non-existent job /// [TestMethod()] public void DeleteNonexistentJobTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; string targetJob = "test"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 11, 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; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); IList u2 = rep.GetJobs(new Options(JobsCmdFlags.LongDescriptions, null, 5)); Assert.IsNotNull(u2); Assert.AreEqual(3, u2.Count); try { Job u = new Job(); u.Id = targetJob; rep.DeleteJob(u, null); } catch (P4Exception e) { Assert.AreEqual(822220838, e.ErrorCode, "Job 'test' doesn't exist.\n"); } } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for a deleting a job using invalid options /// [TestMethod()] public void DeleteJobWithInvalidOptionsTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; string targetJob = "job000001"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 11, 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; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); IList u2 = rep.GetJobs(new Options(JobsCmdFlags.LongDescriptions, null, 5)); Assert.IsNotNull(u2); Assert.AreEqual(3, u2.Count); try { Job u = new Job(); u.Id = targetJob; rep.DeleteJob(u, new Options(JobCmdFlags.Input)); } catch (P4Exception e) { Assert.AreEqual(805372934, e.ErrorCode, "Usage: job -i [ -f ]\nUnexpected arguments.\n"); } } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } /// ///A test for a deleting a job with fixes attached /// /* [TestMethod()] public void DeleteJobWithFixesTest() { bool unicode = false; string uri = "localhost:6666"; string user = "admin"; string pass = string.Empty; string ws_client = "admin_space"; string targetJob = "job000001"; for (int i = 0; i < 2; i++) // run once for ascii, once for unicode { Process p4d = Utilities.DeployP4TestServer(TestDir, 11, 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; bool connected = con.Connect(null); Assert.IsTrue(connected); Assert.AreEqual(con.Status, ConnectionStatus.Connected); IList u2 = rep.GetJobs(new Options(JobsCmdFlags.LongDescriptions, null, 5)); Assert.IsNotNull(u2); Assert.AreEqual(3, u2.Count); try { Job job = rep.GetJob(targetJob); rep.DeleteJob(job, null); } catch (P4Exception e) { // TODO: This is a placeholder. Test criteria will need to be updated once job070607 is // fixed to handle the message returned by the server Assert.IsTrue(e.Message.Contains("fixes associated with it and can't be deleted")); } } } finally { Utilities.RemoveTestServer(p4d, TestDir); } unicode = !unicode; } } */ } }