public void GetStoreVersion(TimeSpan?timeout = null)
        {
            bool conti       = false;
            bool hasFiltered = false;

            do
            {
                hasFiltered = false;
                List <ManagedEvent> tmp     = expectClientRequest(timeout);
                List <ManagedEvent> results = null;
                hasFiltered = filterIgnored(tmp, out results);



                if (results.Count > 1)
                {
                    testSite.Assert.Fail("too many requests");
                }
                foreach (ManagedEvent e in results)
                {
                    if (e.ParsedHttpRequest != null)
                    {
                        if (e.ParsedHttpRequest.RequestUrl.Path.ToLower() == Constraints.StoreUrl.ToLower() && e.ParsedHttpRequest.Method == HttpRequest.HttpMethod.GET)
                        {
                            HttpResponse res = ValidationModel.VerifyRequest(results[0].ParsedHttpRequest);
                            //HttpResponse res = new HttpResponse(System.Net.HttpStatusCode.OK);
                            //if (EnvironmentConfig.TestDeployment)
                            //{
                            //    //// ecxpected a array
                            //    if (initialed)
                            //    {
                            //        res = new HttpResponse(System.Net.HttpStatusCode.OK);
                            //        StoreVersion ver = new StoreVersion();
                            //        ver.key = EnvironmentConfig.SUTConfigEntryKey;
                            //        ver.version = 0;
                            //        res.Body = "[" + ver.ToString() + "]";

                            //        res.SetHeaderField(System.Net.HttpResponseHeader.ContentLength, res.Body.Length.ToString());
                            //    }
                            //}
                            sts.SendMessage(results[0].Sender, Encoding.UTF8.GetBytes(res.ToString()));
                            return;
                        }
                        else
                        {
                            testSite.Assert.Fail("Failed to expect Get Data store version request");
                        }
                    }
                    else
                    {
                        conti = true;
                    }
                }
            } while (conti || hasFiltered);
        }
Exemplo n.º 2
0
        protected override void TestInitialize()
        {
            base.TestInitialize();
            sutAdapter = BaseTestSite.GetAdapter <ISUTControlAdapter>();
            EnvironmentConfig.LoadParameters(BaseTestSite);
            server = new TestServer();
            server.Initialize(BaseTestSite);
            bool       isDeploy = EnvironmentConfig.TestDeployment;
            StackTrace trace    = new System.Diagnostics.StackTrace();

            StackFrame[] frames = trace.GetFrames();
            ValidationModel.Initialize(BaseTestSite, isDeploy);
            ValidationModel.Reset();
        }
        public void GetRelyingPartyTrusts(TimeSpan?timeout = null)
        {
            bool conti       = false;
            bool hasFiltered = false;

            do
            {
                hasFiltered = false;
                List <ManagedEvent> tmp     = expectClientRequest(timeout);
                List <ManagedEvent> results = null;
                hasFiltered = filterIgnored(tmp, out results);



                if (results.Count > 1)
                {
                    testSite.Assert.Fail("too many requests");
                }
                foreach (ManagedEvent e in results)
                {
                    if (e.ParsedHttpRequest != null)
                    {
                        if (e.ParsedHttpRequest.RequestUrl.Path.ToLower() == Constraints.RelyingPartyTrustUrl.ToLower() && e.ParsedHttpRequest.Method == HttpRequest.HttpMethod.GET)
                        {
                            HttpResponse res = ValidationModel.VerifyRequest(results[0].ParsedHttpRequest);
                            //if (EnvironmentConfig.TestDeployment)
                            //{
                            //        res = new HttpResponse(System.Net.HttpStatusCode.OK);
                            //        ProxyTrust pt = new ProxyTrust();
                            //        pt.Identifier = Constraints.DefaultProxyRelyingPartyTrustIdentifier;
                            //        res.Body = pt.ToString();
                            //        res.SetHeaderField(System.Net.HttpResponseHeader.ContentLength, res.Body.Length.ToString());
                            //    }
                            //}
                            sts.SendMessage(results[0].Sender, Encoding.UTF8.GetBytes(res.ToString()));

                            return;
                        }
                        else
                        {
                            testSite.Assert.Fail("Failed to expect Get Proxy Trust identifer request");
                        }
                    }
                    else
                    {
                        conti = true;
                    }
                }
            } while (conti || hasFiltered);
        }
        public void GetSTSConfiguration(TimeSpan?timeout = null)
        {
            bool conti       = false;
            bool hasFiltered = false;

            do
            {
                hasFiltered = false;
                List <ManagedEvent> tmp     = expectClientRequest(timeout);
                List <ManagedEvent> results = null;
                hasFiltered = filterIgnored(tmp, out results);



                if (results.Count > 1)
                {
                    testSite.Assert.Fail("too many requests");
                }
                foreach (ManagedEvent e in results)
                {
                    if (e.ParsedHttpRequest != null)
                    {
                        if (e.ParsedHttpRequest.RequestUrl.Path.ToLower() == Constraints.GetSTSConfigurationUrl.ToLower() && e.ParsedHttpRequest.Method == HttpRequest.HttpMethod.GET)
                        {
                            HttpResponse res = ValidationModel.VerifyRequest(results[0].ParsedHttpRequest);
                            //HttpResponse res = new HttpResponse(System.Net.HttpStatusCode.OK);
                            //STSConfiguration conf = createValidStsConfigurationResponse();
                            //res.Body = Utility.Encode(conf.ToString());
                            //res.SetHeaderField(System.Net.HttpResponseHeader.ContentLength, res.Body.Length.ToString());
                            sts.SendMessage(results[0].Sender, Encoding.UTF8.GetBytes(res.ToString()));
                            return;
                        }
                        else
                        {
                            testSite.Assert.Fail("Failed to expect Get STS Configuration request");
                        }
                    }
                    else
                    {
                        conti = true;
                    }
                }
            } while (conti || hasFiltered);
        }
        public void PostProxyGlobalConfiguration(TimeSpan?timeout = null)
        {
            bool conti       = false;
            bool hasFiltered = false;

            do
            {
                hasFiltered = false;
                List <ManagedEvent> tmp     = expectClientRequest(timeout);
                List <ManagedEvent> results = null;
                hasFiltered = filterIgnored(tmp, out results);

                if (results.Count > 1)
                {
                    testSite.Assert.Fail("too many requests");
                }
                foreach (ManagedEvent e in results)
                {
                    if (e.ParsedHttpRequest != null)
                    {
                        if (e.ParsedHttpRequest.RequestUrl.Path.ToLower() == (Constraints.StoreUrl.ToLower() + "/" + (EnvironmentConfig.IsWin2016 ? EnvironmentConfig.SUTConfigEntryKey_2016 : EnvironmentConfig.SUTConfigEntryKey_2012R2).ToLower()) && e.ParsedHttpRequest.Method == HttpRequest.HttpMethod.POST)
                        {
                            HttpResponse res = ValidationModel.VerifyRequest(results[0].ParsedHttpRequest);
                            sts.SendMessage(results[0].Sender, Encoding.UTF8.GetBytes(res.ToString()));
                            return;
                        }
                        else
                        {
                            testSite.Assert.Fail("Failed to expect Get Data store entry request");
                        }
                    }
                    else
                    {
                        conti = true;
                    }
                }
            } while (conti || hasFiltered);
        }
        public void GetFederationMetadata(TimeSpan?timeout = null)
        {
            bool conti       = false;
            bool hasFiltered = false;

            do
            {
                hasFiltered = false;
                List <ManagedEvent> tmp     = expectClientRequest(timeout);
                List <ManagedEvent> results = null;
                hasFiltered = filterIgnored(tmp, out results);



                if (results.Count > 1)
                {
                    testSite.Assert.Fail("too many requests");
                }
                foreach (ManagedEvent e in results)
                {
                    if (e.ParsedHttpRequest != null)
                    {
                        if (e.ParsedHttpRequest.RequestUrl.Path.ToLower() == Constraints.FederationMetadataUrl.ToLower() && e.ParsedHttpRequest.Method == HttpRequest.HttpMethod.GET)
                        {
                            ValidationModel.VerifyRequest(results[0].ParsedHttpRequest);
                            string temp = null;
                            using (System.IO.StreamReader sr = new System.IO.StreamReader(@"c:\temp\metadataresponse.txt"))
                            {
                                temp = sr.ReadToEnd();
                            }
                            HttpResponse res = new HttpResponse();
                            res.Parse(temp);
                            string   tosend = res.ToString();
                            string[] frags  = res.Body.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
                            //if (0 != string.Compare(tosend, temp))
                            //{
                            //}
                            XmlDocument doc = new XmlDocument();
                            doc.LoadXml(frags[1]);
                            string           cert  = doc.ChildNodes[0].ChildNodes[2].ChildNodes[0].ChildNodes[0].ChildNodes[0].ChildNodes[0].InnerText;
                            X509Certificate2 cert2 = new X509Certificate2("c:\\sign.pfx", "123");
                            doc.ChildNodes[0].ChildNodes[2].ChildNodes[0].ChildNodes[0].ChildNodes[0].ChildNodes[0].InnerText = Convert.ToBase64String(cert2.GetRawCertData());
                            using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
                            {
                                doc.Save(ms);
                                string newBody = frags[0] + "\r\n" + Encoding.UTF8.GetString(ms.ToArray()) + "\r\n" + frags[2] + "\r\n\r\n";
                                res.Body = newBody;
                            }
                            sts.SendMessage(results[0].Sender, Encoding.UTF8.GetBytes(tosend));
                            return;
                        }
                        else
                        {
                            testSite.Assert.Fail("Failed to expect Get Federation Metadata request");
                        }
                    }
                    else
                    {
                        conti = true;
                    }
                }
            } while (conti || hasFiltered);
        }
        public void PostProxyTrust(TimeSpan?timeout = null)
        {
            List <ManagedEvent> results = null;
            // 4 times means 1st unauthorizaed request with saparated body and then request with token and saparated body
            int          maxTryTimes = 4;
            ManagedEvent cache       = null;
            ManagedEvent req         = null;

            do
            {
                results = expectClientRequest(timeout);
                bool wantToProcess = true;
                foreach (ManagedEvent mge in results)
                {
                    ManagedEvent result = mge;
                    if (!wantToProcess)
                    {
                        break;
                    }
                    if (result.ParsedHttpRequest == null && result.EventType == EventType.IncomingRequest && cache != null)
                    {
                        if (cache.ParsedHttpRequest.Body == null)
                        {
                            cache.ParsedHttpRequest.Body = "";
                        }
                        cache.ParsedHttpRequest.Body += result.Text;
                        if (int.Parse(cache.ParsedHttpRequest.GetHeaderFieldValue(System.Net.HttpRequestHeader.ContentLength)) <= cache.ParsedHttpRequest.Body.Length)
                        {
                            result = cache;
                            cache  = null;
                        }
                    }
                    if (result.ParsedHttpRequest != null && result.ParsedHttpRequest.RequestUrl.Path.ToLower() == Microsoft.Protocols.TestTools.StackSdk.Identity.ADFSPIP.Constraints.ProxyTrustUrl.ToLower() && result.ParsedHttpRequest.Method == HttpRequest.HttpMethod.POST)
                    {
                        if (result.ParsedHttpRequest.Body == null)
                        {
                            string expect = result.ParsedHttpRequest.GetHeaderFieldValue(System.Net.HttpRequestHeader.Expect);

                            if (expect != null && expect.ToLower() == "100-continue")
                            {
                                sts.SendMessage(result.Sender, Encoding.UTF8.GetBytes(new HttpResponse(System.Net.HttpStatusCode.Continue).ToString()));
                                cache = result;
                            }
                        }
                        else
                        {
                            wantToProcess = false;
                            maxTryTimes   = 0;
                            req           = result;
                            break;
                        }
                        //  }
                    }
                    else if (result.EventType != EventType.IncomingRequest)
                    {
                        testSite.Assert.Fail("Failed to expect Establish Trust request");
                    }
                }
                maxTryTimes--;
            } while (maxTryTimes > 0);
            HttpResponse res = ValidationModel.VerifyRequest(req.ParsedHttpRequest);

            sts.SendMessage(req.Sender, Encoding.UTF8.GetBytes(res.ToString()));
        }
        public void GetProxyGlobalConfiguration(TimeSpan?timeout = null)
        {
            bool conti       = false;
            bool hasFiltered = false;

            do
            {
                hasFiltered = false;
                List <ManagedEvent> tmp     = expectClientRequest(timeout);
                List <ManagedEvent> results = null;
                hasFiltered = filterIgnored(tmp, out results);

                if (results.Count > 1)
                {
                    testSite.Assert.Fail("too many requests");
                }
                foreach (ManagedEvent e in results)
                {
                    if (e.ParsedHttpRequest != null)
                    {
                        if (e.ParsedHttpRequest.RequestUrl.Path.ToLower() == (Constraints.StoreUrl.ToLower() + "/" + (EnvironmentConfig.IsWin2016 ? EnvironmentConfig.SUTConfigEntryKey_2016 : EnvironmentConfig.SUTConfigEntryKey_2012R2).ToLower()))
                        {
                            HttpResponse res = ValidationModel.VerifyRequest(results[0].ParsedHttpRequest);

                            //// we support return a specific configuration to test sequence
                            //if (EnvironmentConfig.TestDeployment)
                            //{
                            //    if (initialed)
                            //    {
                            //        res = new HttpResponse(System.Net.HttpStatusCode.OK);
                            //        StoreEntry entry = new StoreEntry();
                            //        entry.key = EnvironmentConfig.SUTConfigEntryKey;
                            //        entry.version = 0;
                            //        using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
                            //        {
                            //            createGlobalConfiguration().Save(ms);
                            //            entry.value = Convert.ToBase64String(ms.ToArray());
                            //        }
                            //        res.Body = entry.ToString();
                            //        res.SetHeaderField(System.Net.HttpResponseHeader.ContentLength, res.Body.Length.ToString());
                            //    }
                            //    else
                            //    {
                            //        res = new HttpResponse(System.Net.HttpStatusCode.NotFound);
                            //        res.SetHeaderField(System.Net.HttpResponseHeader.ContentLength, "0");
                            //    }


                            //}
                            sts.SendMessage(results[0].Sender, Encoding.UTF8.GetBytes(res.ToString()));
                            return;
                        }
                        else
                        {
                            testSite.Assert.Fail("Failed to expect Get Data store entry request");
                        }
                    }
                    else
                    {
                        conti = true;
                    }
                }
            } while (conti || hasFiltered);
        }
 /// <summary>
 /// normally we will filter message not under test
 /// </summary>
 /// <param name="events"></param>
 /// <param name="ret"></param>
 /// <returns></returns>
 private bool filterIgnored(List <ManagedEvent> events, out List <ManagedEvent> ret)
 {
     ret = new List <ManagedEvent>();
     foreach (ManagedEvent e in events)
     {
         if (e.ParsedHttpRequest != null)
         {
             bool isFiltered = false;
             foreach (string str in filterUrls)
             {
                 if (e.ParsedHttpRequest.RequestUrl.Path.ToLower().Contains(str.ToLower()))
                 {
                     isFiltered = true;
                     break;
                 }
             }
             if (isFiltered)
             {
                 if (e.ParsedHttpRequest.RequestUrl.Path.ToLower() == Constraints.RenewTrustUrl.ToLower())
                 {
                     continue;
                 }
                 else if (EnvironmentConfig.TestDeployment)
                 {
                 }
                 else
                 {
                     if (e.ParsedHttpRequest.RequestUrl.Path.ToLower() == Constraints.StoreUrl.ToLower() && e.ParsedHttpRequest.Method == HttpRequest.HttpMethod.GET)
                     {
                         HttpResponse res = ValidationModel.VerifyRequest(e.ParsedHttpRequest);
                         sts.SendMessage(e.Sender, Encoding.UTF8.GetBytes(res.ToString()));
                         continue;
                     }
                     else if (e.ParsedHttpRequest.RequestUrl.Path.ToLower() == (Constraints.StoreUrl.ToLower() + "/" + (EnvironmentConfig.IsWin2016 ? EnvironmentConfig.SUTConfigEntryKey_2016 : EnvironmentConfig.SUTConfigEntryKey_2012R2).ToLower()) && e.ParsedHttpRequest.Method == HttpRequest.HttpMethod.GET)
                     {
                         HttpResponse res = ValidationModel.VerifyRequest(e.ParsedHttpRequest);
                         sts.SendMessage(e.Sender, Encoding.UTF8.GetBytes(res.ToString()));
                         continue;
                     }
                     else if (e.ParsedHttpRequest.RequestUrl.Path.ToLower() == Constraints.GetSTSConfigurationUrl.ToLower() && e.ParsedHttpRequest.Method == HttpRequest.HttpMethod.GET)
                     {
                         HttpResponse res = ValidationModel.VerifyRequest(e.ParsedHttpRequest);
                         sts.SendMessage(e.Sender, Encoding.UTF8.GetBytes(res.ToString()));
                         continue;
                     }
                     else
                     {
                     }
                 }
             }
         }
         ret.Add(e);
     }
     if (events.Count != ret.Count)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }