[Mono-bugs] [Bug 710888] New: Persistent WebException when running Simol with mono on Amazon Linux

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Sun Aug 7 15:55:34 EDT 2011


https://bugzilla.novell.com/show_bug.cgi?id=710888

https://bugzilla.novell.com/show_bug.cgi?id=710888#c0


           Summary: Persistent WebException when running Simol with mono
                    on Amazon Linux
    Classification: Mono
           Product: Mono: Runtime
           Version: 2.2.x
          Platform: i686
        OS/Version: Other
            Status: NEW
          Severity: Major
          Priority: P5 - None
         Component: io-layer
        AssignedTo: mono-bugs at lists.ximian.com
        ReportedBy: menkaur at gmail.com
         QAContact: mono-bugs at lists.ximian.com
          Found By: ---
           Blocker: ---


User-Agent:       Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101
Firefox/5.0

I am using Mono to run Simol http://simol.codeplex.com/ on amazon linux
2.6.35.11-83.9.amzn1.i686 with mono version compiled from sources provided on
the website.

Following Mono version is being used: 
Mono JIT compiler version 2.10.3 (tarball Sun Aug  7 09:49:15 UTC 2011)
Copyright (C) 2002-2011 Novell, Inc and Contributors. www.mono-project.com
        TLS:           __thread
        SIGSEGV:       altstack
        Notifications: epoll
        Architecture:  x86
        Disabled:      none
        Misc:          softdebug
        LLVM:          supported, not enabled.
        GC:            Included Boehm (with typed GC and Parallel Mark)


The application consistently produces following error code:

Unhandled Exception: System.Net.WebException: Error getting response stream
(Write: The authentication or decryption has failed.): SendFailure --->
System.IO.IOException: The authentication or decryption has failed. --->
Mono.Security.Protocol.Tls.TlsException: Invalid certificate received from
server. Error code: 0xffffffff800b010a
  at
Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.validateCertificates
(Mono.Security.X509.X509CertificateCollection certificates) [0x00000] in
<filename unknown>:0
  at
Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.ProcessAsTls1
() [0x00000] in <filename unknown>:0
  at Mono.Security.Protocol.Tls.Handshake.HandshakeMessage.Process () [0x00000]
in <filename unknown>:0
  at (wrapper remoting-invoke-with-check)
Mono.Security.Protocol.Tls.Handshake.HandshakeMessage:Process ()
  at Mono.Security.Protocol.Tls.ClientRecordProtocol.ProcessHandshakeMessage
(Mono.Security.Protocol.Tls.TlsStream handMsg) [0x00000] in <filename
unknown>:0
  at Mono.Security.Protocol.Tls.RecordProtocol.InternalReceiveRecordCallback
(IAsyncResult asyncResult) [0x00000] in <filename unknown>:0
  --- End of inner exception stack trace ---
  at Mono.Security.Protocol.Tls.SslStreamBase.AsyncHandshakeCallback
(IAsyncResult asyncResult) [0x00000] in <filename unknown>:0
  --- End of inner exception stack trace ---
  at System.Net.HttpWebRequest.EndGetRequestStream (IAsyncResult asyncResult)
[0x00000] in <filename unknown>:0
  at System.Net.HttpWebRequest.GetRequestStream () [0x00000] in <filename
unknown>:0
  at
Amazon.SimpleDB.AmazonSimpleDBClient.getRequestStreamCallback[ListDomainsResponse]
(IAsyncResult result) [0x00000] in <filename unknown>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.Net.WebException: Error getting
response stream (Write: The authentication or decryption has failed.):
SendFailure ---> System.IO.IOException: The authentication or decryption has
failed. ---> Mono.Security.Protocol.Tls.TlsException: Invalid certificate
received from server. Error code: 0xffffffff800b010a
  at
Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.validateCertificates
(Mono.Security.X509.X509CertificateCollection certificates) [0x00000] in
<filename unknown>:0
  at
Mono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.ProcessAsTls1
() [0x00000] in <filename unknown>:0
  at Mono.Security.Protocol.Tls.Handshake.HandshakeMessage.Process () [0x00000]
in <filename unknown>:0
  at (wrapper remoting-invoke-with-check)
Mono.Security.Protocol.Tls.Handshake.HandshakeMessage:Process ()
  at Mono.Security.Protocol.Tls.ClientRecordProtocol.ProcessHandshakeMessage
(Mono.Security.Protocol.Tls.TlsStream handMsg) [0x00000] in <filename
unknown>:0
  at Mono.Security.Protocol.Tls.RecordProtocol.InternalReceiveRecordCallback
(IAsyncResult asyncResult) [0x00000] in <filename unknown>:0
  --- End of inner exception stack trace ---
  at Mono.Security.Protocol.Tls.SslStreamBase.AsyncHandshakeCallback
(IAsyncResult asyncResult) [0x00000] in <filename unknown>:0
  --- End of inner exception stack trace ---
  at System.Net.HttpWebRequest.EndGetRequestStream (IAsyncResult asyncResult)
[0x00000] in <filename unknown>:0
  at System.Net.HttpWebRequest.GetRequestStream () [0x00000] in <filename
unknown>:0
  at
Amazon.SimpleDB.AmazonSimpleDBClient.getRequestStreamCallback[ListDomainsResponse]
(IAsyncResult result) [0x00000] in <filename unknown>:0

The error occurs on Linux only, windows version works fine.
Here is the code which produces the error:
[DomainName("TestItem")]
    public class TestItem
    {
        public TestItem()
        {

        }
        public TestItem(string qualifier)
        {
            if (qualifier==null)
            {
                qualifier = "";
            }
            Id = qualifier + Guid.NewGuid().ToString();
            Data = GenerateRandomString(rnd.Next(500, 900));
        }

        Random rnd = new Random();
        string GenerateRandomString(int len)
        {
            StringBuilder result = new StringBuilder();
            for (int i = 0; i < len; i++)
            {
                result.Append(rnd.Next(10).ToString());
            }
            return result.ToString();

        }

        [ItemName]
        [Index]
        public string Id { get; set; }
        public string Data { get; set; }
    }
    class Program
    {
        static Random rnd = new Random();
        static void Main(string[] args)
        {
           
///http://simol.codeplex.com/wikipage?title=Getting%20Started&referringTitle=Documentation 
            string key = @"-------";
            string value = @"--------------";

            var simol = new SimolClient(key, value);
            List<IAsyncResult> waits = new List<IAsyncResult>();
            Console.WriteLine("Deleting items from previous test");
            int id = 0;

                foreach (var item in simol.Select<TestItem>("select * from
TestItem"))
                {
                    Console.Write("{0}\t\t\r", id++);
                    waits.Add(simol.BeginDelete<TestItem>(item.Id, null,
null));
                }

            Console.WriteLine("Waiting for delete to complete....");
            id = 0;
            foreach (var item in waits)
            {
                Console.Write("{0}\t\t\r", id++);
                try
                {
                    simol.EndPut(item);
                }
                catch { }
            }

            DateTime time = DateTime.Now;
            Console.WriteLine("Time started:{0}", time);
            string[] groups = new string[] { "group-a-", "group-b-", "group-c-"
};

            Console.WriteLine("Adding started");
            for (int i = 0; i < 10000; i++)
            {
                try
                {
                    waits.Add(simol.BeginPut(new
TestItem(groups[rnd.Next(groups.Length)]), null, null));
                }
                catch { }
            }
            //wait for input to finish
            Console.WriteLine("Adding finished; waiting for complete");
            id = 0;
            foreach (var item in waits)
            {
                Console.Write("{0}\t\t\r", id++);
                try
                {
                    simol.EndPut(item);
                }
                catch { }
            }
            Console.WriteLine("deleting items");
            var items = simol.Select<TestItem>("select * from TestItem");
            Console.WriteLine(items.Count);
            waits.Clear();
            id = 0;
            foreach (var item in simol.Select<TestItem>("select * from
TestItem"))
            {
                Console.Write("{0}\t\t\r", id++);
                waits.Add(simol.BeginDelete<TestItem>(item.Id,null,null));
            }
            foreach (var item in waits)
            {
                Console.Write("{0}\t\t\r", id++);
                try
                {
                    simol.EndPut(item);
                }
                catch { }
            }
            var endTime = DateTime.Now;
            Console.WriteLine("Operation finished:{0}",endTime);
            Console.WriteLine("Time: {0}", endTime - time);
            time = DateTime.Now;
            Console.WriteLine("Time started:{0}", time);
            var odir =
Environment.CurrentDirectory+Path.DirectorySeparatorChar+"tmp"+Path.DirectorySeparatorChar;
            System.IO.Directory.CreateDirectory(odir);

            for (int i = 0; i < 10000; i++)
            {
                Console.Write("{0}\t\t\t\t\t\r", odir + i.ToString());
                Serializer.Serialize(odir + i.ToString(), new
TestItem(groups[rnd.Next(groups.Length)]));
            }
            items.Clear();
            foreach (var item in System.IO.Directory.EnumerateFiles(odir))
            {
                items.Add(Serializer.DeSerialize<TestItem>(item));
            }
            Console.WriteLine(items.Count);
            foreach (var item in System.IO.Directory.EnumerateFiles(odir))
            {
                File.Delete(item);
            }
            endTime = DateTime.Now;
            Console.WriteLine("Operation finished:{0}", endTime);
            Console.WriteLine("Time: {0}", endTime - time);

            //var person = new Person { Name = "Jack Frost" , Id = guid};
            //simol.Put(person);
            //person = new Person { Name = "New name", Id = guid };
            //simol.Put(person);


            //foreach (var item in items)
            //{
            //    simol.Delete<Person>(item.Id);
            //}
            //var res = simol.SelectScalar(new SelectCommand(typeof(Person),
"select count(*) from Person"));

            //Console.WriteLine(res);
        }
    }

The error is generated by specifically this line of code:
simol.Select<TestItem>("select * from TestItem")

Reproducible: Always

Steps to Reproduce:
1. Enter your amazon access credentials
2. Compile
3. Run
Actual Results:  
Exception stack trace

Expected Results:  
Performance test results

-- 
Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.


More information about the mono-bugs mailing list