Ejemplo n.º 1
0
        public void TestBsonDocumentEmptyGuid()
        {
            _collection.RemoveAll();

            var document = new BsonDocument
            {
                { "_id", Guid.Empty },
                { "A", 1 }
            };

            _collection.Save(document);
            Assert.AreEqual(2, document.ElementCount);
            Assert.AreEqual("_id", document.GetElement(0).Name);
            Assert.IsInstanceOf <BsonBinaryData>(document["_id"]);
            Assert.AreNotEqual(BsonBinaryData.Create(Guid.Empty), document["_id"]);
            Assert.AreEqual(1, _collection.Count());

            var id = document["_id"].AsGuid;

            document["A"] = 2;
            _collection.Save(document);
            Assert.AreEqual(id, document["_id"].AsGuid);
            Assert.AreEqual(1, _collection.Count());

            document = _collection.FindOneAs <BsonDocument>();
            Assert.AreEqual(2, document.ElementCount);
            Assert.AreEqual(id, document["_id"].AsGuid);
            Assert.AreEqual(2, document["A"].AsInt32);
        }
Ejemplo n.º 2
0
 internal Cursor(ChannelsPool channelPool, BsonDocument filter, CollectionNamespace collectionNamespace,
                 Guid sessionId)
 {
     _channelPool         = channelPool;
     _filter              = filter;
     _collectionNamespace = collectionNamespace;
     _sessionId           = new BsonDocument("id", BsonBinaryData.Create(sessionId));
 }
Ejemplo n.º 3
0
        public async Task DeleteAsync(Guid teamId, Guid ticketId, Guid id)
        {
            var update = Builders <Team> .Update.PullFilter(p => p.Tickets[FilteredElementIndex].Comments, f => f.Id.Equals(id));

            var filter = Builders <Team> .Filter.Eq("Tickets.Comments._id", BsonBinaryData.Create(id));

            await Context.GetCollection <Team>().FindOneAndUpdateAsync(filter, update);
        }
Ejemplo n.º 4
0
        public async Task RemoveAsync(Guid ticketId, Guid watcherId)
        {
            var update = Builders <Team> .Update.PullFilter(p => p.Tickets.ElementAt(-1).Watchers, f => f.Id.Equals(watcherId));

            var filter = Builders <Team> .Filter.Eq("Tickets.Watchers._id", BsonBinaryData.Create(watcherId));

            await _context.GetCollection <Team>().FindOneAndUpdateAsync(filter, update);
        }
Ejemplo n.º 5
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="value"></param>
 /// <returns></returns>
 public static BsonValue ByteArray(object value)
 {
     byte[] val = (byte[])value;
     if (val == null)
     {
         return(BsonNull.Value);
     }
     return(BsonBinaryData.Create((byte[])value));
 }
Ejemplo n.º 6
0
        public async Task <Guid> CreateAsync(Guid teamId, Guid ticketId, Comment item)
        {
            item.Id = Guid.NewGuid();
            var filter = Builders <Team> .Filter.Eq("Tickets._id", BsonBinaryData.Create(ticketId));

            var update = Builders <Team> .Update.Push(t => t.Tickets[FilteredElementIndex].Comments, item);

            await Context.GetCollection <Team>().UpdateOneAsync(filter, update);

            return(item.Id);
        }
Ejemplo n.º 7
0
        public async Task <Guid> CreateAsync(Guid teamId, Ticket item)
        {
            item.Id       = Guid.NewGuid();
            item.Comments = new List <Comment>();
            var filter = Builders <Team> .Filter.Eq("_id", BsonBinaryData.Create(teamId));

            var update = Builders <Team> .Update.Push(t => t.Tickets, item);

            await _context.GetCollection <Team>().UpdateOneAsync(filter, update);

            return(item.Id);
        }
Ejemplo n.º 8
0
        public async Task <Guid> AddAsync(Guid ticketId, User watcher)
        {
            var filter = Builders <Team> .Filter
                         .Eq("Tickets._id", BsonBinaryData.Create(ticketId));

            var update = Builders <Team> .Update
                         .Push(t => t.Tickets.ElementAt(FiltredElementIndex).Watchers, watcher);

            await _context.GetCollection <Team>().UpdateOneAsync(filter, update);

            return(watcher.Id);
        }
Ejemplo n.º 9
0
        public async Task GuidSerializationDeserialization()
        {
            var guid = Guid.NewGuid();
            var doc  = new BsonDocument
            {
                { "guid", BsonBinaryData.Create(guid) }
            };

            var result = await RoundTripAsync(doc, new BsonDocumentSerializer());

            Assert.Equal(doc, result);
        }
Ejemplo n.º 10
0
        public async Task <Ticket> GetAsync(Guid teamId, Guid id)
        {
            var filter = Builders <Team> .Filter.Eq("_id", BsonBinaryData.Create(teamId));

            var teams = await _context.GetCollection <Team>()
                        .Find(filter)
                        .Project <Team>(Builders <Team> .Projection.Include(t => t.Tickets))
                        .ToListAsync();

            var team = teams.FirstOrDefault();

            return(team?.Tickets?.FirstOrDefault(ticket => ticket.Id == id));
        }
Ejemplo n.º 11
0
        public async Task <IEnumerable <Ticket> > GetAll(Guid teamId)
        {
            var filter = Builders <Team> .Filter.Eq("_id", BsonBinaryData.Create(teamId));

            var teams = await _context.GetCollection <Team>()
                        .Find(filter)
                        .Project <Team>(Builders <Team> .Projection.Include(t => t.Tickets))
                        .ToListAsync();

            var team = teams.FirstOrDefault();

            return(team == null ? new List <Ticket>() : team.Tickets);
        }
Ejemplo n.º 12
0
        public async Task <User> GetAsync(Guid teamId, Guid ticketId, Guid watcherId)
        {
            var filter = Builders <Team> .Filter.Eq("Tickets.Watchers._id", BsonBinaryData.Create(watcherId));

            var teams = await _context.GetCollection <Team>()
                        .Find(filter)
                        .Project <Team>(Builders <Team> .Projection.Include(t => t.Tickets))
                        .ToListAsync();

            var team     = teams.FirstOrDefault();
            var watchers = team?.Tickets?.FirstOrDefault(t => t.Id == ticketId)?.Watchers ?? new List <User>();

            return(watchers.FirstOrDefault(user => user.Id.Equals(watcherId)));
        }
Ejemplo n.º 13
0
        public async Task <IEnumerable <Comment> > GetAllAsync(Guid teamId, Guid ticketId)
        {
            var filter = Builders <Team> .Filter.Eq("_id", BsonBinaryData.Create(teamId));

            var teams = await Context.GetCollection <Team>()
                        .Find(filter)
                        .Project <Team>(Builders <Team> .Projection.Include(t => t.Tickets))
                        .ToListAsync();

            var team   = teams.FirstOrDefault();
            var result = team?.Tickets?.FirstOrDefault(t => t.Id == ticketId)?.Comments ?? new List <Comment>();

            return(result);
        }
Ejemplo n.º 14
0
        public void TestBsonDocumentWithBsonBinaryDataId()
        {
            _collection.RemoveAll();

            var doc = new BsonDocument {
                { "_id", BsonBinaryData.Create(new byte[] { }) }, { "X", 1 }
            };

            _collection.Insert(doc);

            doc = new BsonDocument {
                { "_id", BsonBinaryData.Create(new byte[] { 1, 2, 3 }) }, { "X", 1 }
            };
            _collection.Insert(doc);
        }
Ejemplo n.º 15
0
        public async Task <IEnumerable <Ticket> > FindAsync(Guid teamId, Expression <Func <Ticket, bool> > expression)
        {
            var filter = Builders <Team> .Filter.Eq("_id", BsonBinaryData.Create(teamId));

            var teams = await _context.GetCollection <Team>()
                        .Find(filter)
                        .Project <Team>(Builders <Team> .Projection.Include(t => t.Tickets))
                        .ToListAsync();

            var team    = teams.FirstOrDefault();
            var tickets = team == null
                ? new List <Ticket>()
                : team.Tickets.Where(expression.Compile());

            return(tickets);
        }
Ejemplo n.º 16
0
 private BsonValue GetValue(object value)
 {
     if (value is DBNull || value == null)
     {
         return(BsonNull.Value);
     }
     else if (value is string)
     {
         return(BsonString.Create(value));
     }
     else if (value is bool)
     {
         return(BsonBoolean.Create(value));
     }
     else if (value is int || value is short || value is byte)
     {
         return(BsonInt32.Create(value));
     }
     else if (value is long)
     {
         return(BsonInt64.Create(value));
     }
     else if (value is decimal)
     {
         return(BsonDecimal128.Create(value));
     }
     else if (value is double || value is float)
     {
         return(BsonDouble.Create(value));
     }
     else if (value is DateTime)
     {
         return(BsonDateTime.Create(value));
     }
     else if (value is char c)
     {
         return(BsonString.Create("" + c));
     }
     else if (value is byte[])
     {
         return(BsonBinaryData.Create(value));
     }
     else
     {
         return(BsonString.Create(value.ToString()));
     }
 }
Ejemplo n.º 17
0
        public async Task SendAsync(string destinationQueueName, Message message)
        {
            if (destinationQueueName == null)
            {
                throw new ArgumentNullException(nameof(destinationQueueName));
            }
            if (message == null)
            {
                throw new ArgumentNullException(nameof(message));
            }

            if (!message.Headers.TryGetValue(Fields.MessageId, out var id))
            {
                id = Guid.NewGuid().ToString();
                message.Headers[Fields.MessageId] = id;
            }

            var headers = BsonArray.Create(message.Headers
                                           .Select(kvp => new BsonDocument {
                { Fields.Key, kvp.Key }, { Fields.Value, kvp.Value }
            }));

            await _semaphore.WaitAsync();

            try
            {
                await _config.Collection.InsertOneAsync(new BsonDocument
                {
                    { "_id", id },
                    { Fields.DestinationQueueName, destinationQueueName },
                    { Fields.SendTime, DateTime.UtcNow },
                    { Fields.DeliveryAttempts, 0 },
                    { Fields.ReceiveTime, DateTime.MinValue },
                    { Fields.Headers, headers },
                    { Fields.Body, BsonBinaryData.Create(message.Body) }
                });
            }
            catch (MongoWriteException exception) when(exception.WriteError.Category == ServerErrorCategory.DuplicateKey)
            {
                throw new UniqueMessageIdViolationException(id);
            }
            finally
            {
                _semaphore.Release();
            }
        }
Ejemplo n.º 18
0
        public async Task <Guid> UpdateAsync(Guid teamId, Ticket item)
        {
            var filter = Builders <Team> .Filter.Eq("Tickets._id", BsonBinaryData.Create(item.Id));

            var update = Builders <Team> .Update
                         .Set(x => x.Tickets[FilteredElementIndex].Name, item.Name)
                         .Set(x => x.Tickets[FilteredElementIndex].Text, item.Text)
                         .Set(x => x.Tickets[FilteredElementIndex].Tags, item.Tags)
                         .Set(x => x.Tickets[FilteredElementIndex].Priority, item.Priority)
                         .Set(x => x.Tickets[FilteredElementIndex].Status, item.Status)
                         .Set(x => x.Tickets[FilteredElementIndex].Assignee, item.Assignee)
                         .Set(x => x.Tickets[FilteredElementIndex].CreationDate, item.CreationDate)
                         .Set(x => x.Tickets[FilteredElementIndex].LinkedTicketIds, item.LinkedTicketIds);

            await _context.GetCollection <Team>().UpdateOneAsync(filter, update);

            return(item.Id);
        }
Ejemplo n.º 19
0
        public void TestClastWithBsonBinaryDataId()
        {
            _collection.RemoveAll();

            var doc = new ClassWithBsonBinaryDataId {
                Id = null, X = 1
            };

            _collection.Insert(doc);

            doc = new ClassWithBsonBinaryDataId {
                Id = BsonBinaryData.Create(new byte[] { }), X = 1
            };
            _collection.Insert(doc);

            doc = new ClassWithBsonBinaryDataId {
                Id = BsonBinaryData.Create(new byte[] { 1, 2, 3 }), X = 1
            };
            _collection.Insert(doc);
        }
Ejemplo n.º 20
0
 // public methods
 /// <summary>
 /// Generates an Id for a document.
 /// </summary>
 /// <param name="container">The container of the document (will be a MongoCollection when called from the C# driver). </param>
 /// <param name="document">The document.</param>
 /// <returns>An Id.</returns>
 public object GenerateId(object container, object document)
 {
     return(BsonBinaryData.Create(Guid.NewGuid(), _guidRepresentation));
 }
Ejemplo n.º 21
0
        public void TestCreateNull()
        {
            object obj = null;

            Assert.Throws <ArgumentNullException>(() => { BsonBinaryData.Create(obj); });
        }
Ejemplo n.º 22
0
        public void TestClassWithBsonValueId()
        {
            // repeats all tee TestClassWithBsonXyzId tests using ClassWithBsonValueId
            {
                // same as TestClassWithBonArrayId
                _collection.RemoveAll();

                var doc = new ClassWithBsonValueId {
                    Id = null, X = 1
                };
                _collection.Insert(doc);

                doc = new ClassWithBsonValueId {
                    Id = new BsonArray(), X = 1
                };
                Assert.Throws <MongoSafeModeException>(() => { _collection.Insert(doc); });

                doc = new ClassWithBsonValueId {
                    Id = new BsonArray {
                        1, 2, 3
                    }, X = 1
                };
                Assert.Throws <MongoSafeModeException>(() => { _collection.Insert(doc); });
            }

            {
                // same as TestClastWithBsonBinaryDataId
                _collection.RemoveAll();

                var doc = new ClassWithBsonValueId {
                    Id = null, X = 1
                };
                _collection.Insert(doc);

                doc = new ClassWithBsonValueId {
                    Id = BsonBinaryData.Create(new byte[] { }), X = 1
                };
                _collection.Insert(doc);

                doc = new ClassWithBsonValueId {
                    Id = BsonBinaryData.Create(new byte[] { 1, 2, 3 }), X = 1
                };
                _collection.Insert(doc);
            }

            {
                // same as TestClassWithBsonBooleanId
                _collection.RemoveAll();

                var doc = new ClassWithBsonValueId {
                    Id = null, X = 1
                };
                _collection.Insert(doc);

                doc = new ClassWithBsonValueId {
                    Id = BsonBoolean.Create(false), X = 1
                };
                _collection.Insert(doc);

                doc = new ClassWithBsonValueId {
                    Id = BsonBoolean.Create(true), X = 1
                };
                _collection.Insert(doc);
            }

            {
                // same as TestClassWithBsonDocumentId
                _collection.RemoveAll();

                var doc = new ClassWithBsonValueId {
                    Id = null, X = 1
                };
                _collection.Insert(doc);

                doc = new ClassWithBsonValueId {
                    Id = new BsonDocument(), X = 1
                };
                _collection.Insert(doc);

                doc = new ClassWithBsonValueId {
                    Id = new BsonDocument {
                        { "A", 1 }, { "B", 2 }
                    }, X = 3
                };
                _collection.Insert(doc);
            }

            {
                // same as TestClassWithBsonDateTimeId
                _collection.RemoveAll();

                var doc = new ClassWithBsonValueId {
                    Id = null, X = 1
                };
                _collection.Insert(doc);

                doc = new ClassWithBsonValueId {
                    Id = BsonDateTime.Create(DateTime.MinValue), X = 1
                };
                _collection.Insert(doc);

                doc = new ClassWithBsonValueId {
                    Id = BsonDateTime.Create(DateTime.UtcNow), X = 1
                };
                _collection.Insert(doc);

                doc = new ClassWithBsonValueId {
                    Id = BsonDateTime.Create(DateTime.MaxValue), X = 1
                };
                _collection.Insert(doc);
            }

            {
                // same as TestClassWithBsonDoubleId
                _collection.RemoveAll();

                var doc = new ClassWithBsonValueId {
                    Id = null, X = 1
                };
                _collection.Insert(doc);

                doc = new ClassWithBsonValueId {
                    Id = BsonDouble.Create(0.0), X = 1
                };
                _collection.Insert(doc);

                doc = new ClassWithBsonValueId {
                    Id = BsonDouble.Create(1.0), X = 1
                };
                _collection.Insert(doc);
            }

            {
                // same as TestClassWithBsonInt32Id
                _collection.RemoveAll();

                var doc = new ClassWithBsonValueId {
                    Id = null, X = 1
                };
                _collection.Insert(doc);

                doc = new ClassWithBsonValueId {
                    Id = BsonInt32.Create(0), X = 1
                };
                _collection.Insert(doc);

                doc = new ClassWithBsonValueId {
                    Id = BsonInt32.Create(1), X = 1
                };
                _collection.Insert(doc);
            }

            {
                // same as TestClassWithBsonInt64Id
                _collection.RemoveAll();

                var doc = new ClassWithBsonValueId {
                    Id = null, X = 1
                };
                _collection.Insert(doc);

                doc = new ClassWithBsonValueId {
                    Id = BsonInt64.Create(0), X = 1
                };
                _collection.Insert(doc);

                doc = new ClassWithBsonValueId {
                    Id = BsonInt64.Create(1), X = 1
                };
                _collection.Insert(doc);
            }

            {
                // same as TestClassWithBsonMaxKeyId
                _collection.RemoveAll();

                var doc = new ClassWithBsonValueId {
                    Id = null, X = 1
                };
                _collection.Insert(doc);
                Assert.AreEqual(null, doc.Id);

                doc = new ClassWithBsonValueId {
                    Id = BsonMaxKey.Value, X = 1
                };
                _collection.Insert(doc);
            }

            {
                // same as TestClassWithBsonMinKeyId
                _collection.RemoveAll();

                var doc = new ClassWithBsonValueId {
                    Id = null, X = 1
                };
                _collection.Insert(doc);
                Assert.AreEqual(null, doc.Id);

                doc = new ClassWithBsonValueId {
                    Id = BsonMinKey.Value, X = 1
                };
                _collection.Insert(doc);
            }

            {
                // same as TestClassWithBsonNullId
                _collection.RemoveAll();

                var doc = new ClassWithBsonValueId {
                    Id = null, X = 1
                };
                _collection.Insert(doc);
                Assert.AreEqual(null, doc.Id);

                doc = new ClassWithBsonValueId {
                    Id = BsonNull.Value, X = 1
                };
                Assert.Throws <MongoSafeModeException>(() => { _collection.Insert(doc); });
            }

            {
                // same as TestClassWithBsonObjectId
                _collection.RemoveAll();

                var doc = new ClassWithBsonValueId {
                    Id = null, X = 1
                };
                _collection.Insert(doc);
                Assert.IsNull(doc.Id); // BsonObjectIdGenerator is not invoked when nominalType is BsonValue

                doc = new ClassWithBsonValueId {
                    Id = BsonObjectId.Empty, X = 1
                };
                _collection.Insert(doc);
                Assert.AreEqual(ObjectId.Empty, doc.Id.AsObjectId); // BsonObjectIdGenerator is not invoked when nominalType is BsonValue

                doc = new ClassWithBsonValueId {
                    Id = BsonObjectId.GenerateNewId(), X = 1
                };
                _collection.Insert(doc);
            }

            {
                // same as TestClassWithBsonStringId
                _collection.RemoveAll();

                var doc = new ClassWithBsonValueId {
                    Id = null, X = 1
                };
                _collection.Insert(doc);
                Assert.IsNull(doc.Id);

                doc = new ClassWithBsonValueId {
                    Id = "", X = 1
                };
                _collection.Insert(doc);
                Assert.AreEqual("", doc.Id.AsString);

                doc = new ClassWithBsonValueId {
                    Id = "123", X = 1
                };
                _collection.Insert(doc);
            }

            {
                // same as TestClassWithBsonTimestampId
                _collection.RemoveAll();

                var doc = new ClassWithBsonValueId {
                    Id = null, X = 1
                };
                _collection.Insert(doc);
                Assert.IsNull(doc.Id);

                doc = new ClassWithBsonValueId {
                    Id = BsonTimestamp.Create(0, 0), X = 1
                };
                _collection.Insert(doc);
                Assert.AreEqual(BsonTimestamp.Create(0, 0), doc.Id);

                doc = new ClassWithBsonValueId {
                    Id = BsonTimestamp.Create(1, 2), X = 1
                };
                _collection.Insert(doc);
            }
        }
Ejemplo n.º 23
0
        public static BsonValue Create(this BsonType bsonType, object o)
        {
            BsonValue value = BsonNull.Value;

            try
            {
                switch (bsonType)
                {
                case BsonType.EndOfDocument:
                    break;

                case BsonType.Double:
                    value = BsonDouble.Create(o);
                    break;

                case BsonType.String:
                    value = BsonString.Create(o);
                    break;

                case BsonType.Document:
                    value = BsonDocument.Create(o);
                    break;

                case BsonType.Array:
                    value = BsonArray.Create(o);
                    break;

                case BsonType.Binary:
                    value = BsonBinaryData.Create(o);
                    break;

                case BsonType.Undefined:
                    break;

                case BsonType.ObjectId:
                    value = BsonObjectId.Create(o);
                    break;

                case BsonType.Boolean:
                    value = BsonBoolean.Create(o);
                    break;

                case BsonType.DateTime:
                    value = BsonDateTime.Create(o);
                    break;

                case BsonType.Null:
                    value = BsonNull.Value;
                    break;

                case BsonType.RegularExpression:
                    value = BsonRegularExpression.Create(o);
                    break;

                case BsonType.JavaScript:
                    value = BsonJavaScript.Create(o);
                    break;

                case BsonType.Symbol:
                    value = BsonSymbol.Create(o);
                    break;

                case BsonType.JavaScriptWithScope:
                    value = BsonJavaScriptWithScope.Create(o);
                    break;

                case BsonType.Int32:
                    value = BsonInt32.Create(o);
                    break;

                case BsonType.Timestamp:
                    value = BsonTimestamp.Create(o);
                    break;

                case BsonType.Int64:
                    value = BsonInt64.Create(o);
                    break;

                case BsonType.MaxKey:
                    value = BsonValue.Create(o);
                    break;

                case BsonType.MinKey:
                    value = BsonValue.Create(o);
                    break;
                }
            }
            catch
            {
            }

            return(value);
        }