示例#1
0
 public void TestNotAuthorizedOnNonLoggedUser()
 {
     using (MySqlDataManipulator manipulator = new MySqlDataManipulator())
     {
         manipulator.Connect(TestingConstants.ConnectionString);
         var      user = manipulator.GetUsersWhere(string.Format("Email=\"{0}\"", TestingUserStorage.ValidUser1.Email))[0];
         object[] contextAndRequest = ServerTestingMessageSwitchback.SwitchbackMessage(
             TestingUserStorage.ValidUser1.ConstructSecurityQuestionRequest("x'abaababaaababaaba'", user.UserId),
             "POST");
         var             ctx = contextAndRequest[0] as HttpListenerContext;
         var             req = contextAndRequest[1] as HttpWebRequest;
         HttpWebResponse resp;
         TestApi.POST(ctx);
         try
         {
             resp = req.EndGetResponse(contextAndRequest[2] as IAsyncResult) as HttpWebResponse;
             Assert.Fail("Expected an error message, but didn't receive one.");
         }
         catch (WebException e)
         {
             resp = e.Response as HttpWebResponse;
         }
         Assert.AreEqual(HttpStatusCode.Unauthorized, resp.StatusCode);
     }
 }
示例#2
0
        public bool TrainClusteringModels(MySqlDataManipulator manipulator, int companyId, List <string> examplesIn, bool training = false)
        {
            List <KeywordExample> trainingData = new List <KeywordExample>();

            foreach (string sentence in examplesIn)
            {
                List <string>         tokens       = SentenceTokenizer.TokenizeSentence(sentence);
                List <List <string> > taggedTokens = KeywordTagger.Tag(tokens);
                List <string>         keywords     = KeywordPredictor.PredictKeywords(taggedTokens);
                KeywordExample        example      = new KeywordExample();
                foreach (string keyword in keywords)
                {
                    example.AddKeyword(keyword);
                }
                trainingData.Add(example);
            }
            KeywordClusterer.Train(trainingData);
            if (!training)
            {
                return(KeywordClusterer.Save(manipulator, companyId));
            }
            else
            {
                return(true);
            }
        }
示例#3
0
 public void TestValidRequest()
 {
     using (MySqlDataManipulator manipulator = new MySqlDataManipulator())
     {
         manipulator.Connect(TestingConstants.ConnectionString);
         Assert.IsTrue(NetTestingUserUtils.LogInTestingUser(TestingUserStorage.ValidUser1));
         var      user              = manipulator.GetUsersWhere(string.Format("Email=\"{0}\"", TestingUserStorage.ValidUser1.Email))[0];
         var      loginTokens       = UserVerificationUtil.ExtractLoginTokens(user);
         object[] contextAndRequest = ServerTestingMessageSwitchback.SwitchbackMessage(
             TestingUserStorage.ValidUser1.ConstructSecurityQuestionRequest(loginTokens.LoginToken, user.UserId),
             "POST");
         var             ctx = contextAndRequest[0] as HttpListenerContext;
         var             req = contextAndRequest[1] as HttpWebRequest;
         HttpWebResponse resp;
         TestApi.POST(ctx);
         try
         {
             resp = req.EndGetResponse(contextAndRequest[2] as IAsyncResult) as HttpWebResponse;
         } catch (WebException e)
         {
             resp = e.Response as HttpWebResponse;
             byte[] respData = new byte[resp.ContentLength];
             resp.GetResponseStream().Read(respData, 0, respData.Length);
             Console.WriteLine(Encoding.UTF8.GetString(respData));
             throw e;
         }
         byte[] data = new byte[resp.ContentLength];
         resp.GetResponseStream().Read(data, 0, data.Length);
         string receivedData = Encoding.UTF8.GetString(data);
         Assert.AreEqual(HttpStatusCode.OK, resp.StatusCode);
         Assert.AreEqual(TestingUserStorage.ValidUser1.SecurityQuestion, receivedData);
     }
 }
        public void TestUnauthorizedOnNonLoggedInUser()
        {
            MySqlDataManipulator manipulator = new MySqlDataManipulator();

            Assert.IsTrue(manipulator.Connect(TestingConstants.ConnectionString));
            using (manipulator) {
                PartCatalogueEntry entry = manipulator.GetPartCatalogueEntriesWhere(1,
                                                                                    string.Format("PartId=\"{0}\"", TestingPartEntry.ValidPartEntry1.PartId)
                                                                                    )[0];
                Assert.IsTrue(NetTestingUserUtils.AuthenticateTestingUser(TestingUserStorage.ValidUser3, manipulator));
                OverallUser validUser1 = manipulator.GetUsersWhere(
                    string.Format("Email=\"{0}\"", TestingUserStorage.ValidUser3.Email)
                    )[0];
                var loginTokens = UserVerificationUtil.ExtractLoginTokens(validUser1);
                var message     = TestingPartEntry.ValidPartEntry1.ConstructDeletionRequest(
                    validUser1.UserId, loginTokens.LoginToken, loginTokens.AuthToken, entry.Id
                    );
                message["LoginToken"] = "x'abacbadabac'";
                object[] contextAndRequest = ServerTestingMessageSwitchback.SwitchbackMessage(
                    message, "PATCH"
                    );
                var context = contextAndRequest[0] as HttpListenerContext;
                var req     = contextAndRequest[1] as HttpWebRequest;
                TestApi.PATCH(context);
                HttpWebResponse response;
                try {
                    response = req.EndGetResponse(contextAndRequest[2] as IAsyncResult) as HttpWebResponse;
                    Assert.Fail("Expected and error response, but did not receive one");
                } catch (WebException e) {
                    response = e.Response as HttpWebResponse;
                }
                Assert.AreEqual(HttpStatusCode.Unauthorized, response.StatusCode);
            }
        }
 public void TestUnauthorizedOnNotLoggedInUser()
 {
     using (MySqlDataManipulator manipulator = new MySqlDataManipulator())
     {
         manipulator.Connect(TestingConstants.ConnectionString);
         NetTestingUserUtils.AuthenticateTestingUser(TestingUserStorage.ValidUser1, manipulator);
         var uploadingUser = manipulator.GetUsersWhere(
             string.Format("Email=\"{0}\"", TestingUserStorage.ValidUser1.Email)
             )[0];
         var      loginTokens       = UserVerificationUtil.ExtractLoginTokens(uploadingUser);
         object[] contextAndRequest = ServerTestingMessageSwitchback.SwitchbackMessage(
             TestingRepairJobStorage.RepairJob1.ConstructCreationMessage(
                 uploadingUser.UserId,
                 "I'm Logged-In I Swear!",
                 loginTokens.AuthToken,
                 0
                 ), "POST"
             );
         var             ctx  = contextAndRequest[0] as HttpListenerContext;
         var             req  = contextAndRequest[1] as HttpWebRequest;
         HttpWebResponse resp = null;
         TestApi.POST(ctx);
         try
         {
             resp = req.EndGetResponse(contextAndRequest[2] as IAsyncResult) as HttpWebResponse;
         }
         catch (WebException e)
         {
             resp = e.Response as HttpWebResponse;
             string message = e.Message;
         }
         Assert.AreEqual(HttpStatusCode.Unauthorized, resp.StatusCode);
     }
 }
示例#6
0
        public static bool InitializeJoinRequests()
        {
            if (!DatabaseInitialized)
            {
                return(false);
            }
            MySqlDataManipulator manipulator = new MySqlDataManipulator();

            if (!manipulator.Connect(TestingConstants.ConnectionString))
            {
                return(false);
            }
            using (manipulator) {
                if (manipulator.GetJoinRequests(1).Count == 0)
                {
                    if (!manipulator.AddJoinRequest(TestingJoinRequest.ValidRequest1.CompanyId, TestingJoinRequest.ValidRequest1.UserId))
                    {
                        Console.WriteLine(manipulator.LastException.Message);
                        return(false);
                    }
                }
                if (manipulator.GetJoinRequests(2).Count == 0)
                {
                    if (!manipulator.AddJoinRequest(TestingJoinRequest.ValidRequest2.CompanyId, TestingJoinRequest.ValidRequest2.UserId))
                    {
                        Console.WriteLine(manipulator.LastException.Message);
                        return(false);
                    }
                }
            }
            return(true);
        }
        public bool Save(MySqlDataManipulator manipulator, int companyId)
        {
            List <KeywordGroupEntry> toUpload = new List <KeywordGroupEntry>();

            foreach (KeywordGroup group in ContainedGroups)
            {
                toUpload.Add(new KeywordGroupEntry(group.SelectedKeywords.ToString()));
            }
            List <KeywordGroupEntry> previous;

            previous = manipulator.GetCompanyComplaintGroups(companyId);
            bool res = manipulator.DeleteCompanyComplaintGroups(companyId);

            if (!res)
            {
                return(false);
            }
            res = manipulator.AddCompanyComplaintGroups(companyId, toUpload);
            if (!res)
            {
                res = manipulator.AddCompanyComplaintGroups(companyId, previous);
                if (!res)
                {
                    throw new Exception("Company " + companyId + " keyword clusterer failed to add previous" +
                                        " groups back after deletion. This is really bad.");
                }
                return(false);
            }
            return(true);
        }
        public bool Load(MySqlDataManipulator manipulator, int companyId)
        {
            if (ContainedGroups.Count > 0)
            {
                ContainedGroups.Clear();
            }
            List <KeywordGroupEntry> toLoad = manipulator.GetCompanyComplaintGroups(companyId);

            if (toLoad == null)
            {
                return(false);
            }
            foreach (KeywordGroupEntry entry in toLoad)
            {
                string       def        = entry.GroupDefinition;
                string[]     definition = def.Split(" ");
                KeywordGroup g          = new KeywordGroup(definition[0]);
                for (int i = 1; i < definition.Length; i++)
                {
                    g.SelectedKeywords.AddKeyword(definition[i]);
                }
                ContainedGroups.Add(g);
            }
            return(true);
        }
 public void TestUploadRepairJobSimilarJobsForced()
 {
     using (MySqlDataManipulator manipulator = new MySqlDataManipulator())
     {
         manipulator.Connect(TestingConstants.ConnectionString);
         NetTestingUserUtils.AuthenticateTestingUser(TestingUserStorage.ValidUser1, manipulator);
         var uploadingUser = manipulator.GetUsersWhere(
             string.Format("Email=\"{0}\"", TestingUserStorage.ValidUser1.Email)
             )[0];
         var      loginTokens       = UserVerificationUtil.ExtractLoginTokens(uploadingUser);
         object[] contextAndRequest = ServerTestingMessageSwitchback.SwitchbackMessage(
             TestingRepairJobStorage.RepairJob1.ConstructCreationMessage(
                 uploadingUser.UserId,
                 loginTokens.LoginToken,
                 loginTokens.AuthToken,
                 1
                 ), "POST"
             );
         var             ctx  = contextAndRequest[0] as HttpListenerContext;
         var             req  = contextAndRequest[1] as HttpWebRequest;
         HttpWebResponse resp = null;
         TestApi.POST(ctx);
         try
         {
             resp = req.EndGetResponse(contextAndRequest[2] as IAsyncResult) as HttpWebResponse;
         }
         catch (WebException)
         {
             Assert.Fail("Received an error message when one was not expected");
         }
         Assert.AreEqual(HttpStatusCode.OK, resp.StatusCode);
     }
 }
        /// <summary>
        /// Function to renew HTTPS certification.
        /// </summary>
        /// <param name="manipulator"><see cref="MySqlDataManipulator"/> used to add the company to the database</param>
        /// <remarks>As this is a command to be used by the developers on the project, error output is minimal</remarks>
        public override void PerformFunction(MySqlDataManipulator manipulator)
        {
            var server = ApiLoader.LoadApiAndListen(16384);

            Console.WriteLine("Attempting to retrieve new certificate");
            CertificateRenewer.GetFirstCert(false);
        }
 public void TestNotFoundOnNonExistentUser()
 {
     using (MySqlDataManipulator manipulator = new MySqlDataManipulator())
     {
         manipulator.Connect(TestingConstants.ConnectionString);
         Assert.IsTrue(NetTestingUserUtils.LogInTestingUser(TestingUserStorage.ValidUser1));
         var      user              = manipulator.GetUsersWhere(string.Format("Email=\"{0}\"", TestingUserStorage.ValidUser1.Email))[0];
         var      currentSettings   = user.Settings;
         object[] contextAndRequest = ServerTestingMessageSwitchback.SwitchbackMessage(
             TestingUserStorage.ValidUser1.ConstructRetrieveSettingsRequest(
                 100000,
                 UserVerificationUtil.ExtractLoginTokens(user).LoginToken),
             "PUT");
         var ctx = contextAndRequest[0] as HttpListenerContext;
         var req = contextAndRequest[1] as HttpWebRequest;
         TestApi.PUT(ctx);
         HttpWebResponse resp = null;
         try
         {
             resp = req.EndGetResponse(contextAndRequest[2] as IAsyncResult) as HttpWebResponse;
             Assert.Fail("Expected error response, but did not receive one");
         }
         catch (WebException e)
         {
             resp = e.Response as HttpWebResponse;
         }
         Assert.AreEqual(HttpStatusCode.NotFound, resp.StatusCode);
     }
 }
        public void TestBadRequestOnAllEmptyFields()
        {
            try
            {
                MySqlDataManipulator manipulator = new MySqlDataManipulator();
                using (manipulator)
                {
                    manipulator.Connect(TestingConstants.ConnectionString);
                    Assert.IsTrue(manipulator.RemoveUserByEmail(TestingUserStorage.ValidUser1.Email));
                    var      creationMessage   = new JsonDictionaryStringConstructor();
                    object[] contextAndRequest = ServerTestingMessageSwitchback.SwitchbackMessage(
                        creationMessage,
                        "POST");
                    var ctx = contextAndRequest[0] as HttpListenerContext;
                    var req = contextAndRequest[1] as HttpWebRequest;

                    HttpWebResponse resp;

                    TestApi.POST(ctx);
                    try
                    {
                        resp = req.EndGetResponse(contextAndRequest[2] as IAsyncResult) as HttpWebResponse;
                    }
                    catch (WebException e)
                    {
                        resp = e.Response as HttpWebResponse;
                    }
                    Assert.AreEqual(HttpStatusCode.BadRequest, resp.StatusCode);
                }
            }
            finally
            {
                TestingDatabaseCreationUtils.InitializeUsers();
            }
        }
        public void TestNotFoundOnNonExistentUser()
        {
            using (MySqlDataManipulator manipulator = new MySqlDataManipulator())
            {
                manipulator.Connect(TestingConstants.ConnectionString);
                NetTestingUserUtils.AuthenticateTestingUser(TestingUserStorage.ValidUser1, manipulator);
                var reportingUser = manipulator.GetUsersWhere(
                    string.Format("Email=\"{0}\"", TestingUserStorage.ValidUser1.Email)
                    )[0];
                var      loginTokens       = UserVerificationUtil.ExtractLoginTokens(reportingUser);
                object[] contextAndRequest = ServerTestingMessageSwitchback.SwitchbackMessage(
                    TestingUserStorage.ValidUser1.ConstructReportMessage(
                        10000000,
                        loginTokens.LoginToken,
                        loginTokens.AuthToken,
                        "TerribleName"
                        ), "POST"
                    );

                var             ctx  = contextAndRequest[0] as HttpListenerContext;
                var             req  = contextAndRequest[1] as HttpWebRequest;
                HttpWebResponse resp = null;
                TestApi.POST(ctx);
                try {
                    resp = req.EndGetResponse(contextAndRequest[2] as IAsyncResult) as HttpWebResponse;
                    Assert.Fail("Expected an error message but never received one");
                } catch (WebException e) {
                    resp = e.Response as HttpWebResponse;
                }

                Assert.AreEqual(HttpStatusCode.NotFound, resp.StatusCode);
            }
        }
        public void TestValidAuthenticationRequest()
        {
            MySqlDataManipulator manipulator = new MySqlDataManipulator();

            using (manipulator)
            {
                manipulator.Connect(TestingConstants.ConnectionString);
                Assert.IsTrue(NetTestingUserUtils.AuthenticateTestingUser(TestingUserStorage.ValidUser2, manipulator));
                OverallUser user              = manipulator.GetUsersWhere(string.Format("Email=\"{0}\"", TestingUserStorage.ValidUser2.Email))[0];
                var         loginTokens       = UserVerificationUtil.ExtractLoginTokens(user);
                var         authReq           = TestingUserStorage.ValidUser2.ConstructCheckAuthenticationStatusRequest(loginTokens.LoginToken, loginTokens.AuthToken, user.UserId);
                object[]    contextAndRequest = ServerTestingMessageSwitchback.SwitchbackMessage(authReq, "PUT");
                var         ctx = contextAndRequest[0] as HttpListenerContext;
                var         req = contextAndRequest[1] as HttpWebRequest;
                TestApi.PUT(ctx);
                HttpWebResponse resp;
                try
                {
                    resp = req.EndGetResponse(contextAndRequest[2] as IAsyncResult) as HttpWebResponse;
                }
                catch (WebException e)
                {
                    resp = e.Response as HttpWebResponse;
                    byte[] respData = new byte[resp.ContentLength];
                    resp.GetResponseStream().Read(respData, 0, respData.Length);
                    Console.WriteLine(Encoding.UTF8.GetString(respData));
                    throw e;
                }
                Assert.AreEqual(HttpStatusCode.OK, resp.StatusCode);
            }
        }
        /// <summary>
        /// <para>Uses the supplied <see cref="MySqlDataManipulator"/> to add the setting to all of the specified targets</para>
        /// </summary>
        /// <param name="manipulator"></param>
        public override void PerformFunction(MySqlDataManipulator manipulator)
        {
            if (Target.Equals("user"))
            {
                var users = manipulator.GetUsersWhere("id > 0");
                foreach (OverallUser user in users)
                {
                    //Add the setting to the user if they do not already have a setting with the same key
                    List <UserSettingsEntry> settings = JsonDataObjectUtil <List <UserSettingsEntry> > .ParseObject(user.Settings);

                    bool found = false;
                    foreach (UserSettingsEntry entry in settings)
                    {
                        if (entry.Key.Equals(Key))
                        {
                            found = true;
                            break;
                        }
                    }
                    if (!found)
                    {
                        settings.Add(new UserSettingsEntry()
                        {
                            Key = Key, Value = Value
                        });
                        user.Settings = JsonDataObjectUtil <List <UserSettingsEntry> > .ConvertObject(settings);

                        if (!manipulator.UpdateUsersSettings(user))
                        {
                            Console.WriteLine("Failed to update settings for user " + user.UserId);
                            continue;
                        }
                        Console.WriteLine("Updated settings for user " + user.UserId);
                        continue;
                    }
                    Console.WriteLine("User " + user.UserId + " already had a setting with key " + Key);
                }
            }
            else if (Target.Equals("company"))
            {
                var companies = manipulator.GetCompaniesWithNamePortion("");
                foreach (CompanyId company in companies)
                {
                    //Add the setting to the company if it does not already have one with the same key
                    int  companyId = company.Id;
                    bool found     = manipulator.GetCompanySettingsWhere(companyId, "SettingKey = \"" + Key + "\"").Count == 1;
                    if (!found)
                    {
                        if (!manipulator.AddCompanySetting(companyId, new CompanySettingsEntry(Key, Value)))
                        {
                            Console.WriteLine("Company " + company.LegalName + " failed to have the setting added");
                            continue;
                        }
                        Console.WriteLine("Successfully added setting for company " + company.LegalName);
                        continue;
                    }
                    Console.WriteLine("Company " + company.LegalName + " already had a setting with key " + Key);
                }
            }
        }
        public void BadRequestOnInvalidUserId()
        {
            MySqlDataManipulator manipulator = new MySqlDataManipulator();

            using (manipulator)
            {
                manipulator.Connect(TestingConstants.ConnectionString);
                Assert.IsTrue(NetTestingUserUtils.AuthenticateTestingUser(TestingUserStorage.ValidUser2, manipulator));
                OverallUser user        = manipulator.GetUsersWhere(string.Format("Email=\"{0}\"", TestingUserStorage.ValidUser2.Email))[0];
                var         loginTokens = UserVerificationUtil.ExtractLoginTokens(user);
                var         authReq     = TestingUserStorage.ValidUser2.ConstructCheckAuthenticationStatusRequest(loginTokens.LoginToken, loginTokens.AuthToken, user.UserId);
                authReq.SetMapping("UserId", 0);
                object[] contextAndRequest = ServerTestingMessageSwitchback.SwitchbackMessage(authReq, "PUT");
                var      ctx = contextAndRequest[0] as HttpListenerContext;
                var      req = contextAndRequest[1] as HttpWebRequest;
                TestApi.PUT(ctx);
                HttpWebResponse resp;
                try
                {
                    resp = req.EndGetResponse(contextAndRequest[2] as IAsyncResult) as HttpWebResponse;
                    Assert.Fail();
                }
                catch (WebException e)
                {
                    resp = e.Response as HttpWebResponse;
                }
                Assert.AreEqual(HttpStatusCode.BadRequest, resp.StatusCode);
            }
        }
        public void TestBadRequestOnInvalidUserId()
        {
            MySqlDataManipulator manipulator = new MySqlDataManipulator();

            Assert.IsTrue(manipulator.Connect(TestingConstants.ConnectionString));
            using (manipulator) {
                Assert.IsTrue(NetTestingUserUtils.AuthenticateTestingUser(TestingUserStorage.ValidUser3, manipulator));
                OverallUser validUser1 = manipulator.GetUsersWhere(
                    string.Format("Email=\"{0}\"", TestingUserStorage.ValidUser3.Email)
                    )[0];
                var loginTokens = UserVerificationUtil.ExtractLoginTokens(validUser1);
                var message     = TestingPartEntry.ValidPartEntry1.ConstructAdditionRequest(
                    validUser1.UserId, loginTokens.LoginToken, loginTokens.AuthToken
                    );
                message["UserId"] = 0;
                object[] contextAndRequest = ServerTestingMessageSwitchback.SwitchbackMessage(
                    message, "POST"
                    );
                var context = contextAndRequest[0] as HttpListenerContext;
                var req     = contextAndRequest[1] as HttpWebRequest;
                TestApi.POST(context);
                HttpWebResponse response;
                try {
                    response = req.EndGetResponse(contextAndRequest[2] as IAsyncResult) as HttpWebResponse;
                    Assert.Fail("Expected an error response, but did not receive one");
                } catch (WebException e) {
                    response = e.Response as HttpWebResponse;
                }
                Assert.AreEqual(HttpStatusCode.BadRequest, response.StatusCode);
            }
        }
 public void TestUnauthorizedOnNonLoggedInUser()
 {
     using (MySqlDataManipulator manipulator = new MySqlDataManipulator())
     {
         manipulator.Connect(TestingConstants.ConnectionString);
         Assert.IsTrue(NetTestingUserUtils.LogInTestingUser(TestingUserStorage.ValidUser1));
         var user = manipulator.GetUsersWhere(string.Format("Email=\"{0}\"", TestingUserStorage.ValidUser1.Email))[0];
         List <PreviousUserRequest> currentRequests = user.DecodeRequests();
         object[] contextAndRequest = ServerTestingMessageSwitchback.SwitchbackMessage(
             TestingUserStorage.ValidUser1.ConstructRetrievePreviousRequestsRequest(
                 user.UserId,
                 "x'ababbbaacbaba'"),
             "PUT");
         var ctx = contextAndRequest[0] as HttpListenerContext;
         var req = contextAndRequest[1] as HttpWebRequest;
         TestApi.PUT(ctx);
         HttpWebResponse resp = null;
         try
         {
             resp = req.EndGetResponse(contextAndRequest[2] as IAsyncResult) as HttpWebResponse;
             Assert.Fail("Expected an error response, but did not receive one");
         }
         catch (WebException e)
         {
             resp = e.Response as HttpWebResponse;
         }
         Assert.AreEqual(HttpStatusCode.Unauthorized, resp.StatusCode);
     }
 }
        public override void PerformFunction(MySqlDataManipulator manipulator)
        {
            //Ensure that all KeywordPredictor models are loaded
            //If one is not, then a company requesting that model through its settings will cause an error
            if (!GlobalModelHelper.LoadOrTrainGlobalModels(ReflectionHelper.GetAllKeywordPredictors()))
            {
                throw new NullReferenceException("One or more global models failed to load. Server cannot start.");
            }
            DatabaseQueryProcessor processor = new DatabaseQueryProcessor(DatabaseQueryProcessorSettings.RetrieveCompanySettings(manipulator, CompanyId));

            List <RepairJobEntry> validatedData = manipulator.GetDataEntriesWhere(CompanyId, "id > 0", validated: true);
            List <string>         sentences;

            if (Flag.ToLower().Equals("complaint"))
            {
                //train model
                sentences = validatedData.Select(entry => entry.Complaint).ToList();
                if (!processor.TrainClusteringModels(manipulator, CompanyId, sentences, false))
                {
                    Console.WriteLine("Failed to train problem prediction models for company " + CompanyId);
                    return;
                }
                //register the complaint groups that the clusterer predicts with the repair job entry in the database
                foreach (RepairJobEntry entry in validatedData)
                {
                    string groups = JsonDataObjectUtil <List <int> > .ConvertObject(processor.PredictGroupsInJobData(entry, CompanyId, manipulator));

                    entry.ComplaintGroups = groups;
                    manipulator.UpdateDataEntryGroups(CompanyId, entry, complaint: true);
                }
            }
            Console.WriteLine("Trained clustering models for company " + CompanyId);
        }
 public void TestRetrieveUserSettingsDefaultValues()
 {
     using (MySqlDataManipulator manipulator = new MySqlDataManipulator())
     {
         manipulator.Connect(TestingConstants.ConnectionString);
         Assert.IsTrue(NetTestingUserUtils.LogInTestingUser(TestingUserStorage.ValidUser1));
         var      user              = manipulator.GetUsersWhere(string.Format("Email=\"{0}\"", TestingUserStorage.ValidUser1.Email))[0];
         var      currentSettings   = user.Settings;
         object[] contextAndRequest = ServerTestingMessageSwitchback.SwitchbackMessage(
             TestingUserStorage.ValidUser1.ConstructRetrieveSettingsRequest(
                 user.UserId,
                 UserVerificationUtil.ExtractLoginTokens(user).LoginToken),
             "PUT");
         var ctx = contextAndRequest[0] as HttpListenerContext;
         var req = contextAndRequest[1] as HttpWebRequest;
         TestApi.PUT(ctx);
         HttpWebResponse resp = null;
         try
         {
             resp = req.EndGetResponse(contextAndRequest[2] as IAsyncResult) as HttpWebResponse;
         }
         catch (Exception e)
         {
             Assert.Fail(e.Message);
         }
         using (resp)
         {
             Assert.AreEqual(HttpStatusCode.OK, resp.StatusCode);
             byte[] data = new byte[resp.ContentLength];
             resp.GetResponseStream().Read(data, 0, data.Length);
             string received = Encoding.UTF8.GetString(data);
             Assert.AreEqual(currentSettings, received);
         }
     }
 }
示例#21
0
        public void LoginNonExistantUser()
        {
            try
            {
                using (MySqlDataManipulator manipulator = new MySqlDataManipulator())
                {
                    manipulator.Connect(TestingConstants.ConnectionString);
                    Assert.IsTrue(manipulator.RemoveUserByEmail(TestingUserStorage.ValidUser2.Email));
                    object[] contextAndRequest = ServerTestingMessageSwitchback.SwitchbackMessage(
                        TestingUserStorage.ValidUser2.ConstructLoginRequest(),
                        "PUT");
                    var ctx = contextAndRequest[0] as HttpListenerContext;
                    var req = contextAndRequest[1] as HttpWebRequest;
                    TestApi.PUT(ctx);

                    HttpWebResponse resp;
                    try
                    {
                        resp = req.EndGetResponse(contextAndRequest[2] as IAsyncResult) as HttpWebResponse;
                        Assert.Fail("Expected the response to be an error response. This was not the case.");
                    }
                    catch (WebException e)
                    {
                        resp = e.Response as HttpWebResponse;
                    }
                    Assert.AreEqual(HttpStatusCode.NotFound, resp.StatusCode);
                }
            }
            finally
            {
                TestingDatabaseCreationUtils.InitializeUsers();
            }
        }
示例#22
0
        /// <summary>
        /// Request for retrieving a user's security question. Documention is found in the Web API Enumeration file
        /// in the /User/Auth tab, starting at row 1
        /// </summary>
        /// <param name="ctx">The HttpListenerContext to respond to</param>
        private void HandlePostRequest(HttpListenerContext ctx)
        {
            try
            {
                #region Input Validation
                if (!ctx.Request.HasEntityBody)
                {
                    WriteBodyResponse(ctx, 400, "No Body", "Request lacked a body");
                    return;
                }
                SecurityQuestionRequest req = JsonDataObjectUtil <SecurityQuestionRequest> .ParseObject(ctx);

                if (req == null)
                {
                    WriteBodyResponse(ctx, 400, "Incorrect Format", "Request was in the wrong format");
                    return;
                }
                if (!ValidateSecurityQuestionRequest(req))
                {
                    WriteBodyResponse(ctx, 400, "Incorrect Format", "Not all fields of the request were filled");
                    return;
                }
                #endregion

                MySqlDataManipulator connection = new MySqlDataManipulator();
                using (connection)
                {
                    bool res = connection.Connect(MySqlDataManipulator.GlobalConfiguration.GetConnectionString());
                    if (!res)
                    {
                        WriteBodyResponse(ctx, 500, "Unexpected ServerError", "Connection to database failed");
                        return;
                    }
                    #region Action Handling
                    var user = connection.GetUserById(req.UserId);
                    if (user == null)
                    {
                        WriteBodyResponse(ctx, 404, "Not Found", "User was not found on the server");
                        return;
                    }
                    if (!UserVerificationUtil.LoginTokenValid(user, req.LoginToken))
                    {
                        WriteBodyResponse(ctx, 401, "Unauthorized", "Login Token was incorrect or expired");
                        return;
                    }
                    WriteBodyResponse(ctx, 200, "OK", user.SecurityQuestion);
                    #endregion
                }
            }
            catch (HttpListenerException)
            {
                //HttpListeners dispose themselves when an exception occurs, so we can do no more.
            }
            catch (Exception)
            {
                WriteBodylessResponse(ctx, 500, "Internal Server Error");
            }
        }
        public void TestValidRequest()
        {
            MySqlDataManipulator manipulator = new MySqlDataManipulator();

            Assert.IsTrue(manipulator.Connect(TestingConstants.ConnectionString));
            using (manipulator) {
                PartCatalogueEntry entry = manipulator.GetPartCatalogueEntriesWhere(1,
                                                                                    string.Format("PartId=\"{0}\"", TestingPartEntry.ValidPartEntry1.PartId)
                                                                                    )[0];
                Assert.IsTrue(manipulator.RemovePartCatalogueEntry(
                                  1, entry.Id
                                  ));
                var entryList = manipulator.GetPartCatalogueEntriesWhere(
                    1,
                    string.Format("PartId=\"{0}\"", TestingPartEntry.ValidPartEntry1.PartId)
                    );
                Assert.AreEqual(0, entryList.Count);
                try {
                    Assert.IsTrue(NetTestingUserUtils.AuthenticateTestingUser(TestingUserStorage.ValidUser3, manipulator));
                    OverallUser validUser1 = manipulator.GetUsersWhere(
                        string.Format("Email=\"{0}\"", TestingUserStorage.ValidUser3.Email)
                        )[0];
                    var loginTokens = UserVerificationUtil.ExtractLoginTokens(validUser1);
                    var message     = TestingPartEntry.ValidPartEntry1.ConstructAdditionRequest(
                        validUser1.UserId, loginTokens.LoginToken, loginTokens.AuthToken
                        );
                    object[] contextAndRequest = ServerTestingMessageSwitchback.SwitchbackMessage(
                        message, "POST"
                        );
                    var context = contextAndRequest[0] as HttpListenerContext;
                    var req     = contextAndRequest[1] as HttpWebRequest;
                    TestApi.POST(context);
                    HttpWebResponse response;
                    try {
                        response = req.EndGetResponse(contextAndRequest[2] as IAsyncResult) as HttpWebResponse;
                    } catch (WebException e) {
                        response = e.Response as HttpWebResponse;
                        Assert.Fail("Server sent back an error response: {0}",
                                    response.StatusCode);
                    }
                    Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
                    var addedEntryList = manipulator.GetPartCatalogueEntriesWhere(
                        1,
                        string.Format("PartId=\"{0}\"", TestingPartEntry.ValidPartEntry1.PartId)
                        );
                    Assert.AreEqual(1, addedEntryList.Count);
                } finally {
                    if (
                        manipulator.GetPartCatalogueEntriesWhere(1,
                                                                 string.Format("PartId=\"{0}\"", TestingPartEntry.ValidPartEntry1.PartId)
                                                                 ).Count == 0
                        )
                    {
                        Assert.IsTrue(TestingDatabaseCreationUtils.InitializePartCatelogueEntries());
                    }
                }
            }
        }
示例#24
0
 /// <summary>
 /// Function to create and add the user specified by the command to the database
 /// </summary>
 /// <param name="manipulator"><see cref="MySqlDataManipulator"/> used to add the user to the database</param>
 public override void PerformFunction(MySqlDataManipulator manipulator)
 {
     if (!manipulator.AddUser(Email, Password, SecurityQuestion, SecurityAnswer, AccessLevel, CompanyId))
     {
         Console.WriteLine("Error while adding user...");
         return;
     }
     Console.WriteLine("Successfully added user with email " + Email);
 }
        public void TestValidReport()
        {
            using (MySqlDataManipulator manipulator = new MySqlDataManipulator())
            {
                manipulator.Connect(TestingConstants.ConnectionString);
                var reportedUser = manipulator.GetUsersWhere(string.Format("Email=\"{0}\"", TestingUserStorage.ValidUser2.Email))[0];
                try
                {
                    reportedUser.UpdateSettings(UserSettingsEntryKeys.DisplayName, "TerribleName");
                    Assert.IsTrue(manipulator.UpdateUsersSettings(reportedUser));
                    NetTestingUserUtils.AuthenticateTestingUser(TestingUserStorage.ValidUser1, manipulator);
                    var reportingUser = manipulator.GetUsersWhere(
                        string.Format("Email=\"{0}\"", TestingUserStorage.ValidUser1.Email)
                        )[0];
                    var      loginTokens       = UserVerificationUtil.ExtractLoginTokens(reportingUser);
                    object[] contextAndRequest = ServerTestingMessageSwitchback.SwitchbackMessage(
                        TestingUserStorage.ValidUser1.ConstructReportMessage(
                            reportingUser.UserId,
                            loginTokens.LoginToken,
                            loginTokens.AuthToken,
                            "TerribleName"
                            ), "POST"
                        );

                    var             ctx  = contextAndRequest[0] as HttpListenerContext;
                    var             req  = contextAndRequest[1] as HttpWebRequest;
                    HttpWebResponse resp = null;
                    TestApi.POST(ctx);
                    try {
                        resp = req.EndGetResponse(contextAndRequest[2] as IAsyncResult) as HttpWebResponse;
                    } catch (WebException) {
                        Assert.Fail("Received an error message when one was not expected");
                    }

                    Assert.AreEqual(HttpStatusCode.OK, resp.StatusCode);
                    reportedUser = manipulator.GetUsersWhere(string.Format("Email=\"{0}\"", TestingUserStorage.ValidUser2.Email))[0];
                    var reportedUserSettings = JsonDataObjectUtil <List <UserSettingsEntry> > .ParseObject(reportedUser.Settings);

                    bool foundDisplayName = false;
                    foreach (UserSettingsEntry entry in reportedUserSettings)
                    {
                        if (entry.Key == UserSettingsEntryKeys.DisplayName)
                        {
                            foundDisplayName = true;
                            Assert.AreEqual("Default User " + reportedUser.UserId, entry.Value);
                            break;
                        }
                    }
                    Assert.IsTrue(foundDisplayName);
                } finally
                {
                    reportedUser.Settings = OverallUser.GenerateDefaultSettings();
                    Assert.IsTrue(manipulator.UpdateUsersSettings(reportedUser));
                }
            }
        }
 /// <summary>
 /// Function to add the company specified by LegalName to the database, along with all the
 /// tables required for basic company functionality
 /// </summary>
 /// <param name="manipulator"><see cref="MySqlDataManipulator"/> used to add the company to the database</param>
 /// <remarks>As this is a command to be used by the developers on the project, error output is minimal</remarks>
 public override void PerformFunction(MySqlDataManipulator manipulator)
 {
     if (!manipulator.AddCompany(LegalName))
     {
         Console.WriteLine("Failed to add company " + string.Join(" ", LegalName));
         Console.WriteLine("Failed because of error " + manipulator.LastException.Message);
         return;
     }
     Console.WriteLine("Successfully added company " + string.Join(" ", LegalName));
 }
示例#27
0
        /// <summary>
        /// GET request format located in the Web Api Enumeration v2
        /// under the tab Company/Parts/Request, starting row 23
        /// </summary>
        /// <param name="ctx">HttpListenerContext to respond to</param>
        private void HandleGetRequest(HttpListenerContext ctx, CompanyPartsRequestGetRequest entry)
        {
            try
            {
                MySqlDataManipulator connection = new MySqlDataManipulator();
                using (connection)
                {
                    bool res = connection.Connect(MySqlDataManipulator.GlobalConfiguration.GetConnectionString());
                    if (!res)
                    {
                        WriteBodyResponse(ctx, 500, "Unexpected Server Error", "Connection to database failed");
                        return;
                    }
                    #region User Validation
                    OverallUser mappedUser = connection.GetUserById(entry.UserId);
                    if (mappedUser == null)
                    {
                        WriteBodyResponse(ctx, 404, "Not Found", "User was not found on on the server");
                        return;
                    }
                    if (!UserVerificationUtil.LoginTokenValid(mappedUser, entry.LoginToken))
                    {
                        WriteBodyResponse(ctx, 401, "Not Authorized", "Login token was incorrect.");
                        return;
                    }
                    if (!UserVerificationUtil.AuthTokenValid(mappedUser, entry.AuthToken))
                    {
                        WriteBodyResponse(ctx, 401, "Not Authorized", "Auth token was ezpired or incorrect");
                        return;
                    }
                    if ((mappedUser.AccessLevel & AccessLevelMasks.PartMask) == 0)
                    {
                        WriteBodyResponse(ctx, 401, "Not Authorized", "User was not a parts level user");
                        return;
                    }
                    #endregion

                    #region Action Handling
                    JsonListStringConstructor retConstructor = new JsonListStringConstructor();
                    List <PartsRequest>       requests       = connection.GetPartsRequests(mappedUser.Company);
                    requests.ForEach(req => retConstructor.AddElement(WritePartsRequestToOutput(req, connection, mappedUser.Company)));

                    WriteBodyResponse(ctx, 200, "OK", retConstructor.ToString());
                    #endregion
                }
            }
            catch (HttpListenerException)
            {
                //HttpListeners dispose themselves when an exception occurs, so we can do no more.
            }
            catch (Exception e)
            {
                WriteBodyResponse(ctx, 500, "Internal Server Error", e.Message);
            }
        }
        /// <summary>
        /// Function to perform the update of the <see cref="RepairJobEntry"/>'s validation status
        /// </summary>
        /// <param name="manipulator"><see cref="MySqlDataManipulator"/> used to update the <see cref="RepairJobEntry"/>'s
        /// validation status</param>
        public override void PerformFunction(MySqlDataManipulator manipulator)
        {
            RepairJobEntry entry = manipulator.GetDataEntryById(CompanyId, RepairEntryId, CurrentlyValidated);

            if (!manipulator.UpdateValidationStatus(CompanyId, entry, CurrentlyValidated))
            {
                Console.WriteLine("Failed to update validation status");
                return;
            }
            Console.WriteLine("Updated validation status for entry with id " + RepairEntryId);
        }
示例#29
0
        public static void SetupTestSuite(TestContext ctx)
        {
            if (!TestingDatabaseCreationUtils.InitializeDatabaseSchema())
            {
                throw new Exception("Failed to initialize database schema. See logged error");
            }
            Manipulator = new MySqlDataManipulator();
            bool res = Manipulator.Connect(TestingConstants.ConnectionString);

            Manipulator.AddUser("msn", "1234", "red", "blue");
        }
示例#30
0
 static void PerformTraining()
 {
     try
     {
         while (true)
         {
             MySqlDataManipulator manipulator = new MySqlDataManipulator();
             if (!manipulator.Connect(MySqlDataManipulator.GlobalConfiguration.GetConnectionString()))
             {
                 throw new ArgumentException("MySqlDataManipulator failed to connect to the database");
             }
             Console.WriteLine("Checking company training statuses");
             List <CompanyId> companies = manipulator.GetCompaniesWithNamePortion("");
             foreach (CompanyId company in companies)
             {
                 if (manipulator.GetCountInTable(TableNameStorage.CompanyValidatedRepairJobTable.Replace("(n)", company.Id.ToString())) != 0)
                 {
                     DateTime             lastTrainedTime = DateTime.Parse(company.LastTrainedTime);
                     CompanySettingsEntry trainInterval   = manipulator.GetCompanySettingsWhere(company.Id, "SettingKey=\"" + CompanySettingsKey.RetrainInterval + "\"")[0];
                     bool shouldTrain = lastTrainedTime.AddDays(int.Parse(trainInterval.SettingValue)) <= DateTime.Now;
                     if (shouldTrain)
                     {
                         Console.WriteLine("Performing training for company " + company.LegalName);
                         DatabaseQueryProcessor processor = new DatabaseQueryProcessor(DatabaseQueryProcessorSettings.RetrieveCompanySettings(manipulator, company.Id));
                         CompanyModelUtils.TrainClusteringModel(manipulator, processor, company.Id, training: false);
                         company.LastTrainedTime = DateTime.Now.ToString();
                         manipulator.UpdateCompanyTrainingTime(company);
                         double automatedTestingResults = CompanyModelUtils.PerformAutomatedTesting(manipulator, company.Id, processor);
                         company.ModelAccuracy = (float)(100 - automatedTestingResults);
                         manipulator.UpdateCompanyAutomatedTestingResults(company);
                         Console.WriteLine("Accuracy after training: " + company.ModelAccuracy);
                     }
                 }
                 if (manipulator.GetCountInTable(TableNameStorage.CompanyNonValidatedRepairJobTable.Replace("(n)", company.Id.ToString())) != 0)
                 {
                     DateTime lastValidatedTime = DateTime.Parse(company.LastValidatedTime);
                     bool     shouldValidate    = lastValidatedTime.AddDays(14) <= DateTime.Now;
                     if (shouldValidate)
                     {
                         Console.WriteLine("Attempting to validate some non-validated data for company " + company.LegalName);
                         DatabaseQueryProcessor processor = new DatabaseQueryProcessor(DatabaseQueryProcessorSettings.RetrieveCompanySettings(manipulator, company.Id));
                         CompanyModelUtils.PerformDataValidation(manipulator, company.Id, processor);
                     }
                 }
             }
             manipulator.Close();
             Thread.Sleep(TimeSpan.FromMinutes(120));
         }
     }
     catch (ThreadInterruptedException)
     {
         Console.WriteLine("Retraining Thread Exiting");
     }
 }