예제 #1
0
        public IUnifiedTestOperation CreateOperation(string operationName, string targetEntityId, BsonDocument operationArguments)
        {
            switch (targetEntityId)
            {
            case "testRunner":
                switch (operationName)
                {
                case "assertCollectionExists":
                    return(new UnifiedAssertCollectionExistsOperationBuilder().Build(operationArguments));

                case "assertCollectionNotExists":
                    return(new UnifiedAssertCollectionNotExistsOperationBuilder().Build(operationArguments));

                case "assertDifferentLsidOnLastTwoCommands":
                    return(new UnifiedAssertDifferentLsidOnLastTwoCommandsOperationBuilder(_entityMap).Build(operationArguments));

                case "assertIndexExists":
                    return(new UnifiedAssertIndexExistsOperationBuilder().Build(operationArguments));

                case "assertIndexNotExists":
                    return(new UnifiedAssertIndexNotExistsOperationBuilder().Build(operationArguments));

                case "assertSameLsidOnLastTwoCommands":
                    return(new UnifiedAssertSameLsidOnLastTwoCommandsOperationBuilder(_entityMap).Build(operationArguments));

                case "assertSessionDirty":
                    return(new UnifiedAssertSessionDirtyOperationBuilder(_entityMap).Build(operationArguments));

                case "assertSessionNotDirty":
                    return(new UnifiedAssertSessionNotDirtyOperationBuilder(_entityMap).Build(operationArguments));

                case "assertSessionPinned":
                    return(new UnifiedAssertSessionPinnedOperationBuilder(_entityMap).Build(operationArguments));

                case "assertSessionTransactionState":
                    return(new UnifiedAssertSessionTransactionStateOperationBuilder(_entityMap).Build(operationArguments));

                case "assertSessionUnpinned":
                    return(new UnifiedAssertSessionUnpinnedOperationBuilder(_entityMap).Build(operationArguments));

                case "failPoint":
                    return(new UnifiedFailPointOperationBuilder(_entityMap).Build(operationArguments));

                case "targetedFailPoint":
                    return(new UnifiedTargetedFailPointOperationBuilder(_entityMap).Build(operationArguments));

                default:
                    throw new FormatException($"Invalid method name: '{operationName}'.");
                }

            case var _ when _entityMap.HasBucket(targetEntityId):
                switch (operationName)
                {
                case "delete":
                    return(new UnifiedGridFsDeleteOperationBuilder(_entityMap).Build(targetEntityId, operationArguments));

                case "download":
                    return(new UnifiedGridFsDownloadOperationBuilder(_entityMap).Build(targetEntityId, operationArguments));

                case "upload":
                    return(new UnifiedGridFsUploadOperationBuilder(_entityMap).Build(targetEntityId, operationArguments));

                default:
                    throw new FormatException($"Invalid method name: '{operationName}'.");
                }

            case var _ when _entityMap.HasChangeStream(targetEntityId):
                switch (operationName)
                {
                case "iterateUntilDocumentOrError":
                    return(new UnifiedIterateUntilDocumentOrErrorOperationBuilder(_entityMap).Build(targetEntityId, operationArguments));

                default:
                    throw new FormatException($"Invalid method name: '{operationName}'.");
                }

            case var _ when _entityMap.HasClient(targetEntityId):
                switch (operationName)
                {
                case "createChangeStream":
                    return(new UnifiedCreateChangeStreamOnClientOperationBuilder(_entityMap).Build(targetEntityId, operationArguments));

                case "listDatabases":
                    return(new UnifiedListDatabasesOperationBuilder(_entityMap).Build(targetEntityId, operationArguments));

                default:
                    throw new FormatException($"Invalid method name: '{operationName}'.");
                }

            case var _ when _entityMap.HasCollection(targetEntityId):
                switch (operationName)
                {
                case "aggregate":
                    return(new UnifiedAggregateOnCollectionOperationBuilder(_entityMap).Build(targetEntityId, operationArguments));

                case "bulkWrite":
                    return(new UnifiedBulkWriteOperationBuilder(_entityMap).Build(targetEntityId, operationArguments));

                case "createChangeStream":
                    return(new UnifiedCreateChangeStreamOnCollectionOperationBuilder(_entityMap).Build(targetEntityId, operationArguments));

                case "createIndex":
                    return(new UnifiedCreateIndexOperationBuilder(_entityMap).Build(targetEntityId, operationArguments));

                case "deleteOne":
                    return(new UnifiedDeleteOneOperationBuilder(_entityMap).Build(targetEntityId, operationArguments));

                case "find":
                    return(new UnifiedFindOperationBuilder(_entityMap).Build(targetEntityId, operationArguments));

                case "findOneAndUpdate":
                    return(new UnifiedFindOneAndUpdateOperationBuilder(_entityMap).Build(targetEntityId, operationArguments));

                case "insertMany":
                    return(new UnifiedInsertManyOperationBuilder(_entityMap).Build(targetEntityId, operationArguments));

                case "insertOne":
                    return(new UnifiedInsertOneOperationBuilder(_entityMap).Build(targetEntityId, operationArguments));

                case "replaceOne":
                    return(new UnifiedReplaceOneOperationBuilder(_entityMap).Build(targetEntityId, operationArguments));

                default:
                    throw new FormatException($"Invalid method name: '{operationName}'.");
                }

            case var _ when _entityMap.HasDatabase(targetEntityId):
                switch (operationName)
                {
                case "aggregate":
                    return(new UnifiedAggregateOnDatabaseOperationBuilder(_entityMap).Build(targetEntityId, operationArguments));

                case "createCollection":
                    return(new UnifiedCreateCollectionOperationBuilder(_entityMap).Build(targetEntityId, operationArguments));

                case "dropCollection":
                    return(new UnifiedDropCollectionOperationBuilder(_entityMap).Build(targetEntityId, operationArguments));

                default:
                    throw new FormatException($"Invalid method name: '{operationName}'.");
                }

            case var _ when _entityMap.HasSession(targetEntityId):
                switch (operationName)
                {
                case "abortTransaction":
                    return(new UnifiedAbortTransactionOperationBuilder(_entityMap).Build(targetEntityId, operationArguments));

                case "commitTransaction":
                    return(new UnifiedCommitTransactionOperationBuilder(_entityMap).Build(targetEntityId, operationArguments));

                case "endSession":
                    return(new UnifiedEndSessionOperationBuilder(_entityMap).Build(targetEntityId, operationArguments));

                case "startTransaction":
                    return(new UnifiedStartTransactionOperationBuilder(_entityMap).Build(targetEntityId, operationArguments));

                case "withTransaction":
                    return(new UnifiedWithTransactionOperationBuilder(_entityMap).Build(targetEntityId, operationArguments));

                default:
                    throw new FormatException($"Invalid method name: '{operationName}'.");
                }

            default:
                throw new FormatException($"Target entity type not recognized for entity with id: '{targetEntityId}'.");
            }
        }