Exemple #1
0
        public void AtomicUpdate()
        {
            var xml        = EmbeddedResource.GetEmbeddedString(GetType(), "Resources.response.xml");
            var connection = new MSolrConnection();

            connection.postStream += new MFunc <string, string, Stream, IEnumerable <KeyValuePair <string, string> >, string>((url, contentType, content, param) => {
                string text = new StreamReader(content, Encoding.UTF8).ReadToEnd();
                Assert.Equal("/update", url);
                Assert.Equal("commitWithin", ((KeyValuePair <string, string>[])param)[0].Key);
                Assert.Equal("4343", ((KeyValuePair <string, string>[])param)[0].Value);
                Assert.Equal("[{\"id\":\"0\",\"animal\":{\"set\":\"squirrel\"},\"food\":{\"add\":[\"nuts\",\"seeds\"]},\"count\":{\"inc\":3},\"colour\":{\"remove\":\"pink\"},\"habitat\":{\"removeregex\":[\"tree.*\",\"river.+\"]}}]", text);
                return(xml);
            });
            var headerParser = new MSolrHeaderResponseParser();

            headerParser.parse += _ => null;
            var basic      = new SolrBasicServer <TestDocumentWithUniqueKey>(connection, null, null, null, headerParser, null, null, null);
            var ops        = new SolrServer <TestDocumentWithUniqueKey>(basic, new AttributesMappingManager(), null);
            var parameters = new AtomicUpdateParameters {
                CommitWithin = 4343
            };
            var updateSpecs = new AtomicUpdateSpec[] { new AtomicUpdateSpec("animal", AtomicUpdateType.Set, "squirrel"),
                                                       new AtomicUpdateSpec("food", AtomicUpdateType.Add, new string[] { "nuts", "seeds" }), new AtomicUpdateSpec("count", AtomicUpdateType.Inc, 3),
                                                       new AtomicUpdateSpec("colour", AtomicUpdateType.Remove, "pink"), new AtomicUpdateSpec("habitat", AtomicUpdateType.RemoveRegex, new string[] { "tree.*", "river.+" }) };

            ops.AtomicUpdate(new TestDocumentWithUniqueKey(), updateSpecs, parameters);
            Assert.Equal(1, connection.postStream.Calls);
        }
Exemple #2
0
        public void AtomicUpdate()
        {
            var solr = ServiceLocator.Current.GetInstance <ISolrOperations <Product> >();

            solr.Delete(SolrQuery.All);
            solr.Commit();
            AddSampleDocs();

            var updateSpecs = new AtomicUpdateSpec[] { new AtomicUpdateSpec("features", AtomicUpdateType.Add, new string[] { "Feature 3", "Feature 4" }),
                                                       new AtomicUpdateSpec("price", AtomicUpdateType.Inc, "1"),
                                                       new AtomicUpdateSpec("manu", AtomicUpdateType.Set, "MyCo"),
                                                       new AtomicUpdateSpec("cat", AtomicUpdateType.RemoveRegex, "hard.*") };
            AtomicUpdateParameters parameters = new AtomicUpdateParameters();

            parameters.CommitWithin = 1;
            solr.AtomicUpdate("SP2514N", updateSpecs, parameters);
            solr.Commit();

            Product productAfterUpdate = solr.Query("id:SP2514N")[0];

            Assert.True(productAfterUpdate.Features.Contains("Feature 3"));
            Assert.True(productAfterUpdate.Features.Contains("Feature 4"));
            Assert.Equal("MyCo", productAfterUpdate.Manufacturer);
            Assert.Equal(93, productAfterUpdate.Price);
            Assert.False(productAfterUpdate.Features.Contains("hard drive"));
        }
Exemple #3
0
        public void AtomicUpdateAdd()
        {
            var conn = new Mocks.MSolrConnection();

            conn.postStream += new MFunc <string, string, Stream, IEnumerable <KeyValuePair <string, string> >, string>((url, contentType, content, param) => {
                string text = new StreamReader(content, Encoding.UTF8).ReadToEnd();
                Assert.Equal("/update", url);
                Assert.Equal("[{\"id\":\"0\",\"food\":{\"add\":\"nuts\"}}]", text);
                testOutputHelper.WriteLine(text);
                return(null);
            });
            var updateSpecs = new AtomicUpdateSpec[] { new AtomicUpdateSpec("food", AtomicUpdateType.Add, "nuts") };
            var cmd         = new AtomicUpdateCommand("id", "0", updateSpecs, null);

            cmd.Execute(conn);
            Assert.Equal(1, conn.postStream.Calls);
        }
        public void AtomicUpdateSetEmptyArray()
        {
            var conn = new Mocks.MSolrConnection();

            conn.postStream += new MFunc <string, string, Stream, IEnumerable <KeyValuePair <string, string> >, string>((url, contentType, content, param) => {
                string text = new StreamReader(content, Encoding.UTF8).ReadToEnd();
                Assert.Equal("/update", url);
                Assert.Equal("[{\"id\":\"0\",\"animal\":{\"set\":[]}}]", text);
                Console.WriteLine(text);
                return(null);
            });
            var updateSpecs = new AtomicUpdateSpec[] { new AtomicUpdateSpec("animal", AtomicUpdateType.Set, new string[] {}) };
            var cmd         = new AtomicUpdateCommand("id", "0", updateSpecs, null);

            cmd.Execute(conn);
            Assert.Equal(1, conn.postStream.Calls);
        }
        public void AtomicUpdateCommandNameInvariantCulture()
        {
            var conn = new Mocks.MSolrConnection();

            conn.postStream += new MFunc <string, string, Stream, IEnumerable <KeyValuePair <string, string> >, string>((url, contentType, content, param) => {
                string text = new StreamReader(content, Encoding.UTF8).ReadToEnd();
                Assert.Equal("/update", url);
                Assert.Equal("[{\"id\":\"0\",\"count\":{\"inc\":1}}]", text);
                Console.WriteLine(text);
                return(null);
            });
            var updateSpecs = new AtomicUpdateSpec[] { new AtomicUpdateSpec("count", AtomicUpdateType.Inc, 1) };
            var cmd         = new AtomicUpdateCommand("id", "0", updateSpecs, null);

            cmd.Execute(conn);
            Assert.Equal(1, conn.postStream.Calls);
        }
        public void AtomicUpdateRemoveRegexArray()
        {
            var conn = new Mocks.MSolrConnection();

            conn.postStream += new MFunc <string, string, Stream, IEnumerable <KeyValuePair <string, string> >, string>((url, contentType, content, param) => {
                string text = new StreamReader(content, Encoding.UTF8).ReadToEnd();
                Assert.Equal("/update", url);
                Assert.Equal("[{\"id\":\"0\",\"food\":{\"removeregex\":[\"nu.*\",\"seeds\",\"berr.+\"]}}]", text);
                Console.WriteLine(text);
                return(null);
            });
            var updateSpecs = new AtomicUpdateSpec[] { new AtomicUpdateSpec("food", AtomicUpdateType.RemoveRegex, new string[] { "nu.*", "seeds", "berr.+" }) };
            var cmd         = new AtomicUpdateCommand("id", "0", updateSpecs, null);

            cmd.Execute(conn);
            Assert.Equal(1, conn.postStream.Calls);
        }
Exemple #7
0
        public void AtomicUpdateWithParameter()
        {
            var conn = new Mocks.MSolrConnection();

            conn.postStream += new MFunc <string, string, Stream, IEnumerable <KeyValuePair <string, string> >, string>((url, contentType, content, param) => {
                string text = new StreamReader(content, Encoding.UTF8).ReadToEnd();
                Assert.Equal("/update", url);
                Assert.Equal("commitwithin", ((KeyValuePair <string, string>[])param)[0].Key);
                Assert.Equal("4343", ((KeyValuePair <string, string>[])param)[0].Value);
                Assert.Equal("[{\"id\":\"0\",\"count\":{\"inc\":3}}]", text);
                testOutputHelper.WriteLine(text);
                return(null);
            });
            var parameters = new AtomicUpdateParameters {
                CommitWithin = 4343
            };
            var updateSpecs = new AtomicUpdateSpec[] { new AtomicUpdateSpec("count", AtomicUpdateType.Inc, 3) };
            var cmd         = new AtomicUpdateCommand("id", "0", updateSpecs, parameters);

            cmd.Execute(conn);
            Assert.Equal(1, conn.postStream.Calls);
        }
Exemple #8
0
        public void AtomicUpdateSerialization()
        {
            var conn = new Mocks.MSolrConnection();

            conn.postStream += new MFunc <string, string, Stream, IEnumerable <KeyValuePair <string, string> >, string>((url, contentType, content, param) => {
                string text = new StreamReader(content, Encoding.UTF8).ReadToEnd();
                Assert.Equal("/update", url);
                Assert.Equal("[{"
                             + "\"id\":\"0\","
                             + "\"quote\":{\"set\":\"\\\"quoted\\\"\"},"
                             + "\"backslashInText\":{\"set\":\"y\\\\n\"},"
                             + "\"newLineInText\":{\"set\":\"line1\\nline2\"}"
                             + "}]",
                             text);
                testOutputHelper.WriteLine(text);
                return(null);
            });

            /* This document is equivalent to:
             * {
             *   id = 0;
             *   quote = "quoted";
             *   backslashInText = y\n;
             *   newLineInText = line1
             *   line2;
             * }
             */
            var updateSpecs = new AtomicUpdateSpec[] {
                new AtomicUpdateSpec("quote", AtomicUpdateType.Set, "\"quoted\""),
                new AtomicUpdateSpec("backslashInText", AtomicUpdateType.Set, "y\\n"),
                new AtomicUpdateSpec("newLineInText", AtomicUpdateType.Set, "line1\nline2")
            };
            var cmd = new AtomicUpdateCommand("id", "0", updateSpecs, null);

            cmd.Execute(conn);
            Assert.Equal(1, conn.postStream.Calls);
        }
Exemple #9
0
        public void AtomicUpdateNullIdHandledGracefully()
        {
            var updateSpecs = new AtomicUpdateSpec[] { new AtomicUpdateSpec("count", AtomicUpdateType.Inc, "3") };

            Assert.Throws <ArgumentNullException>(() => new AtomicUpdateCommand("id", null, updateSpecs, null));
        }