...

Source file src/github.com/go-kivik/kivik/v4/couchdb/test/couchdb31.go

Documentation: github.com/go-kivik/kivik/v4/couchdb/test

     1  // Licensed under the Apache License, Version 2.0 (the "License"); you may not
     2  // use this file except in compliance with the License. You may obtain a copy of
     3  // the License at
     4  //
     5  //  http://www.apache.org/licenses/LICENSE-2.0
     6  //
     7  // Unless required by applicable law or agreed to in writing, software
     8  // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
     9  // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
    10  // License for the specific language governing permissions and limitations under
    11  // the License.
    12  
    13  package test
    14  
    15  import (
    16  	"net/http"
    17  
    18  	kivik "github.com/go-kivik/kivik/v4"
    19  	"github.com/go-kivik/kivik/v4/kiviktest"
    20  	"github.com/go-kivik/kivik/v4/kiviktest/kt"
    21  )
    22  
    23  // nolint:gomnd
    24  func registerSuiteCouch31() {
    25  	kiviktest.RegisterSuite(kiviktest.SuiteCouch31, kt.SuiteConfig{
    26  		"Options":                       httpClient(),
    27  		"AllDBs.expected":               []string{"_global_changes", "_replicator", "_users"},
    28  		"AllDBs/RW/group/NoAuth.status": http.StatusUnauthorized,
    29  		"AllDBs/NoAuth.status":          http.StatusUnauthorized,
    30  
    31  		"CreateDB/RW/NoAuth.status":                  http.StatusUnauthorized,
    32  		"CreateDB/RW/Admin/Recreate.status":          http.StatusPreconditionFailed,
    33  		"CreateDoc/RW/group/NoAuth/WithID.status":    http.StatusUnauthorized,
    34  		"CreateDoc/RW/group/NoAuth/WithoutID.status": http.StatusUnauthorized,
    35  
    36  		"DestroyDB/RW/NoAuth.status":              http.StatusUnauthorized,
    37  		"DestroyDB/RW/Admin/NonExistantDB.status": http.StatusNotFound,
    38  
    39  		"AllDocs.databases":                          []string{"chicken", "_duck"},
    40  		"AllDocs/Admin/_replicator.offset":           0,
    41  		"AllDocs/Admin/chicken.status":               http.StatusNotFound,
    42  		"AllDocs/Admin/_duck.status":                 http.StatusNotFound,
    43  		"AllDocs/NoAuth/_replicator.status":          http.StatusUnauthorized,
    44  		"AllDocs/NoAuth/chicken.status":              http.StatusNotFound,
    45  		"AllDocs/NoAuth/_duck.status":                http.StatusUnauthorized,
    46  		"AllDocs/RW/group/NoAuth/WithDocs.status":    http.StatusUnauthorized,
    47  		"AllDocs/RW/group/NoAuth/WithoutDocs.status": http.StatusUnauthorized,
    48  
    49  		"Find.databases":                      []string{"chicken", "_duck"},
    50  		"Find/Admin/chicken.status":           http.StatusNotFound,
    51  		"Find/Admin/_duck.status":             http.StatusNotFound,
    52  		"Find/NoAuth/chicken.status":          http.StatusNotFound,
    53  		"Find/NoAuth/_duck.status":            http.StatusUnauthorized,
    54  		"Find/RW/group/Admin/Warning.warning": "No matching index found, create an index to optimize query time.",
    55  		"Find/RW/group/NoAuth.status":         http.StatusUnauthorized,
    56  
    57  		"Explain.databases":              []string{"chicken", "_duck"},
    58  		"Explain/Admin/chicken.status":   http.StatusNotFound,
    59  		"Explain/Admin/_duck.status":     http.StatusNotFound,
    60  		"Explain/NoAuth/chicken.status":  http.StatusNotFound,
    61  		"Explain/NoAuth/_duck.status":    http.StatusUnauthorized,
    62  		"Explain/RW/group/NoAuth.status": http.StatusUnauthorized,
    63  		"Explain.plan": &kivik.QueryPlan{
    64  			Index: map[string]interface{}{
    65  				"ddoc": nil,
    66  				"name": "_all_docs",
    67  				"type": "special",
    68  				"def":  map[string]interface{}{"fields": []interface{}{map[string]string{"_id": "asc"}}},
    69  			},
    70  			Selector: map[string]interface{}{"_id": map[string]interface{}{"$gt": nil}},
    71  			Options: map[string]interface{}{
    72  				"bookmark":        "nil",
    73  				"conflicts":       false,
    74  				"execution_stats": false,
    75  				"r":               []int{49},
    76  				"sort":            map[string]interface{}{},
    77  				"use_index":       []interface{}{},
    78  				"stable":          false,
    79  				"stale":           false,
    80  				"update":          true,
    81  				"skip":            0,
    82  				"limit":           25,
    83  				"partition":       "",
    84  				"fields":          "all_fields",
    85  			},
    86  			Range: nil,
    87  			Limit: 25,
    88  		},
    89  
    90  		"DBExists.databases":              []string{"_users", "chicken", "_duck"},
    91  		"DBExists/Admin/_users.exists":    true,
    92  		"DBExists/Admin/chicken.exists":   false,
    93  		"DBExists/Admin/_duck.exists":     false,
    94  		"DBExists/NoAuth/_users.status":   http.StatusUnauthorized,
    95  		"DBExists/NoAuth/chicken.exists":  false,
    96  		"DBExists/NoAuth/_duck.status":    http.StatusUnauthorized,
    97  		"DBExists/RW/group/Admin.exists":  true,
    98  		"DBExists/RW/group/NoAuth.status": http.StatusUnauthorized,
    99  
   100  		// "DBsStats/NoAuth.status": http.StatusUnauthorized,
   101  
   102  		"AllDBsStats/NoAuth.status": http.StatusUnauthorized,
   103  
   104  		"Log.skip": true, // This was removed in CouchDB 2.0
   105  
   106  		"Version.version":        `^3\.1\.`,
   107  		"Version.vendor":         `^The Apache Software Foundation$`,
   108  		"Version.vendor_version": ``, // CouchDB 2.0+ no longer has a vendor version
   109  
   110  		"Get/RW/group/Admin/bogus.status":        http.StatusNotFound,
   111  		"Get/RW/group/NoAuth/bogus.status":       http.StatusUnauthorized,
   112  		"Get/RW/group/NoAuth/_design/foo.status": http.StatusUnauthorized,
   113  		"Get/RW/group/NoAuth/bob.status":         http.StatusUnauthorized,
   114  		"Get/RW/group/NoAuth/_local/foo.status":  http.StatusUnauthorized,
   115  
   116  		"GetRev/RW/group/Admin/bogus.status":        http.StatusNotFound,
   117  		"GetRev/RW/group/NoAuth/bogus.status":       http.StatusUnauthorized,
   118  		"GetRev/RW/group/NoAuth/_local/foo.status":  http.StatusUnauthorized,
   119  		"GetRev/RW/group/NoAuth/_design/foo.status": http.StatusUnauthorized,
   120  		"GetRev/RW/group/NoAuth/bob.status":         http.StatusUnauthorized,
   121  
   122  		"Flush.databases":                     []string{"_users", "chicken", "_duck"},
   123  		"Flush/NoAuth/chicken/DoFlush.status": http.StatusNotFound,
   124  		"Flush/Admin/chicken/DoFlush.status":  http.StatusNotFound,
   125  		"Flush/Admin/_duck/DoFlush.status":    http.StatusNotFound,
   126  		"Flush/NoAuth/_duck/DoFlush.status":   http.StatusUnauthorized,
   127  		"Flush/NoAuth/_users/DoFlush.status":  http.StatusUnauthorized,
   128  
   129  		"Delete/RW/Admin/group/MissingDoc.status":        http.StatusNotFound,
   130  		"Delete/RW/Admin/group/InvalidRevFormat.status":  http.StatusBadRequest,
   131  		"Delete/RW/Admin/group/WrongRev.status":          http.StatusConflict,
   132  		"Delete/RW/NoAuth/group/MissingDoc.status":       http.StatusUnauthorized,
   133  		"Delete/RW/NoAuth/group/InvalidRevFormat.status": http.StatusUnauthorized,
   134  		"Delete/RW/NoAuth/group/WrongRev.status":         http.StatusUnauthorized,
   135  		"Delete/RW/NoAuth/group/DesignDoc.status":        http.StatusUnauthorized,
   136  		"Delete/RW/NoAuth/group/ValidRev.status":         http.StatusUnauthorized,
   137  		"Delete/RW/NoAuth/group/Local.status":            http.StatusUnauthorized,
   138  
   139  		"Session/Get/Admin.info.authentication_handlers":  "cookie,default",
   140  		"Session/Get/Admin.info.authentication_db":        "",
   141  		"Session/Get/Admin.info.authenticated":            "cookie",
   142  		"Session/Get/Admin.userCtx.roles":                 "_admin",
   143  		"Session/Get/Admin.ok":                            "true",
   144  		"Session/Get/NoAuth.info.authentication_handlers": "cookie,default",
   145  		"Session/Get/NoAuth.info.authentication_db":       "",
   146  		"Session/Get/NoAuth.info.authenticated":           "",
   147  		"Session/Get/NoAuth.userCtx.roles":                "",
   148  		"Session/Get/NoAuth.ok":                           "true",
   149  
   150  		"Session/Post/EmptyJSON.status":                             http.StatusBadRequest,
   151  		"Session/Post/BogusTypeJSON.status":                         http.StatusBadRequest,
   152  		"Session/Post/BogusTypeForm.status":                         http.StatusBadRequest,
   153  		"Session/Post/EmptyForm.status":                             http.StatusBadRequest,
   154  		"Session/Post/BadJSON.status":                               http.StatusBadRequest,
   155  		"Session/Post/BadForm.status":                               http.StatusBadRequest,
   156  		"Session/Post/MeaninglessJSON.status":                       http.StatusInternalServerError,
   157  		"Session/Post/MeaninglessForm.status":                       http.StatusBadRequest,
   158  		"Session/Post/GoodJSON.status":                              http.StatusUnauthorized,
   159  		"Session/Post/BadQueryParam.status":                         http.StatusUnauthorized,
   160  		"Session/Post/BadCredsJSON.status":                          http.StatusUnauthorized,
   161  		"Session/Post/BadCredsForm.status":                          http.StatusUnauthorized,
   162  		"Session/Post/GoodCredsJSONRemoteRedirAbsolute.status":      http.StatusBadRequest, // As of 2.1.1 all redirect paths must begin with '/'
   163  		"Session/Post/GoodCredsJSONRedirEmpty.status":               http.StatusBadRequest, // As of 2.1.1 all redirect paths must begin with '/'
   164  		"Session/Post/GoodCredsJSONRedirRelativeNoSlash.status":     http.StatusBadRequest, // As of 2.1.1 all redirect paths must begin with '/'
   165  		"Session/Post/GoodCredsJSONRemoteRedirHeaderInjection.skip": true,                  // CouchDB allows header injection
   166  		"Session/Post/GoodCredsJSONRemoteRedirInvalidURL.skip":      true,                  // CouchDB doesn't sanitize the Location value, so sends unparseable headers.
   167  
   168  		"Stats.databases":             []string{"_users", "chicken", "_duck"},
   169  		"Stats/Admin/chicken.status":  http.StatusNotFound,
   170  		"Stats/Admin/_duck.status":    http.StatusNotFound,
   171  		"Stats/NoAuth/chicken.status": http.StatusNotFound,
   172  		"Stats/NoAuth/_duck.status":   http.StatusUnauthorized,
   173  		"Stats/NoAuth/_users.status":  http.StatusUnauthorized,
   174  		"Stats/RW/NoAuth.status":      http.StatusUnauthorized,
   175  
   176  		"Compact.skip":             false,
   177  		"Compact/RW/NoAuth.status": http.StatusUnauthorized,
   178  
   179  		"Security.databases":                     []string{"_replicator", "_users", "_global_changes", "chicken", "_duck"},
   180  		"Security/Admin/chicken.status":          http.StatusNotFound,
   181  		"Security/Admin/_duck.status":            http.StatusNotFound,
   182  		"Security/NoAuth/_global_changes.status": http.StatusUnauthorized,
   183  		"Security/NoAuth/chicken.status":         http.StatusNotFound,
   184  		"Security/NoAuth/_duck.status":           http.StatusUnauthorized,
   185  		"Security/RW/group/NoAuth.status":        http.StatusUnauthorized,
   186  		"SetSecurity/RW/Admin/NotExists.status":  http.StatusNotFound,
   187  		"SetSecurity/RW/NoAuth/NotExists.status": http.StatusNotFound,
   188  		"SetSecurity/RW/NoAuth/Exists.status":    http.StatusUnauthorized,
   189  		"Security/NoAuth/_replicator.status":     http.StatusUnauthorized,
   190  		"Security/NoAuth/_users.status":          http.StatusUnauthorized,
   191  
   192  		"DBUpdates/RW/NoAuth.status": http.StatusUnauthorized,
   193  
   194  		"BulkDocs/RW/NoAuth/group/Mix/Conflict.status": http.StatusConflict,
   195  		"BulkDocs/RW/Admin/group/Mix/Conflict.status":  http.StatusConflict,
   196  		"BulkDocs/RW/NoAuth/group/Mix.status":          http.StatusUnauthorized,
   197  		"BulkDocs/RW/NoAuth/group/Delete.status":       http.StatusUnauthorized,
   198  		"BulkDocs/RW/NoAuth/group/Update.status":       http.StatusUnauthorized,
   199  		"BulkDocs/RW/NoAuth/group/Create.status":       http.StatusUnauthorized,
   200  		"BulkDocs/RW/NoAuth/group/NonJSON.status":      http.StatusUnauthorized,
   201  
   202  		"GetAttachment/RW/group/Admin/foo/NotFound.status":         http.StatusNotFound,
   203  		"GetAttachment/RW/group/NoAuth/foo/NotFound.status":        http.StatusUnauthorized,
   204  		"GetAttachment/RW/group/NoAuth/_design/foo/foo.txt.status": http.StatusUnauthorized,
   205  		"GetAttachment/RW/group/NoAuth/foo/foo.txt.status":         http.StatusUnauthorized,
   206  
   207  		"GetAttachmentMeta/RW/group/Admin/foo/NotFound.status":         http.StatusNotFound,
   208  		"GetAttachmentMeta/RW/group/NoAuth/foo/NotFound.status":        http.StatusUnauthorized,
   209  		"GetAttachmentMeta/RW/group/NoAuth/_design/foo/foo.txt.status": http.StatusUnauthorized,
   210  		"GetAttachmentMeta/RW/group/NoAuth/foo/foo.txt.status":         http.StatusUnauthorized,
   211  
   212  		"PutAttachment/RW/group/Admin/Conflict.status":         http.StatusConflict,
   213  		"PutAttachment/RW/group/NoAuth/Conflict.status":        http.StatusUnauthorized,
   214  		"PutAttachment/RW/group/NoAuth/UpdateDesignDoc.status": http.StatusUnauthorized,
   215  		"PutAttachment/RW/group/NoAuth/CreateDesignDoc.status": http.StatusUnauthorized,
   216  		"PutAttachment/RW/group/NoAuth/Update.status":          http.StatusUnauthorized,
   217  		"PutAttachment/RW/group/NoAuth/Create.status":          http.StatusUnauthorized,
   218  
   219  		// "DeleteAttachment/RW/group/Admin/NotFound.status":  http.StatusNotFound, // COUCHDB-3362
   220  		"DeleteAttachment/RW/group/NoAuth/NotFound.status":  http.StatusUnauthorized,
   221  		"DeleteAttachment/RW/group/Admin/NoDoc.status":      http.StatusConflict,
   222  		"DeleteAttachment/RW/group/NoAuth/NoDoc.status":     http.StatusUnauthorized,
   223  		"DeleteAttachment/RW/group/NoAuth/DesignDoc.status": http.StatusUnauthorized,
   224  		"DeleteAttachment/RW/group/NoAuth/foo.txt.status":   http.StatusUnauthorized,
   225  
   226  		"Put/RW/Admin/group/LeadingUnderscoreInID.status":  http.StatusBadRequest,
   227  		"Put/RW/Admin/group/Conflict.status":               http.StatusConflict,
   228  		"Put/RW/NoAuth/group/LeadingUnderscoreInID.status": http.StatusUnauthorized,
   229  		"Put/RW/NoAuth/group/DesignDoc.status":             http.StatusUnauthorized,
   230  		"Put/RW/NoAuth/group/Conflict.status":              http.StatusUnauthorized,
   231  		"Put/RW/NoAuth/group/HeavilyEscapedID":             http.StatusUnauthorized,
   232  		"Put/RW/NoAuth/group/Local.status":                 http.StatusUnauthorized,
   233  		"Put/RW/NoAuth/group/HeavilyEscapedID.status":      http.StatusUnauthorized,
   234  		"Put/RW/NoAuth/group/SlashInID.status":             http.StatusUnauthorized,
   235  		"Put/RW/NoAuth/group/Create.status":                http.StatusUnauthorized,
   236  
   237  		"CreateIndex/RW/Admin/group/EmptyIndex.status":    http.StatusBadRequest,
   238  		"CreateIndex/RW/Admin/group/BlankIndex.status":    http.StatusBadRequest,
   239  		"CreateIndex/RW/Admin/group/InvalidIndex.status":  http.StatusBadRequest,
   240  		"CreateIndex/RW/Admin/group/NilIndex.status":      http.StatusBadRequest,
   241  		"CreateIndex/RW/Admin/group/InvalidJSON.status":   http.StatusBadRequest,
   242  		"CreateIndex/RW/NoAuth/group/EmptyIndex.status":   http.StatusUnauthorized,
   243  		"CreateIndex/RW/NoAuth/group/BlankIndex.status":   http.StatusBadRequest,
   244  		"CreateIndex/RW/NoAuth/group/InvalidIndex.status": http.StatusUnauthorized,
   245  		"CreateIndex/RW/NoAuth/group/NilIndex.status":     http.StatusUnauthorized,
   246  		"CreateIndex/RW/NoAuth/group/InvalidJSON.status":  http.StatusBadRequest,
   247  		"CreateIndex/RW/NoAuth/group/Valid.status":        http.StatusUnauthorized,
   248  
   249  		"GetIndexes.databases":                     []string{"_replicator", "_users", "_global_changes", "chicken", "_duck"},
   250  		"GetIndexes/Admin/_replicator.indexes":     []kivik.Index{kt.AllDocsIndex},
   251  		"GetIndexes/Admin/_users.indexes":          []kivik.Index{kt.AllDocsIndex},
   252  		"GetIndexes/Admin/_global_changes.indexes": []kivik.Index{kt.AllDocsIndex},
   253  		"GetIndexes/Admin/chicken.status":          http.StatusNotFound,
   254  		"GetIndexes/Admin/_duck.status":            http.StatusNotFound,
   255  		"GetIndexes/NoAuth/_replicator.indexes":    []kivik.Index{kt.AllDocsIndex},
   256  		"GetIndexes/NoAuth/_users.indexes":         []kivik.Index{kt.AllDocsIndex},
   257  		"GetIndexes/NoAuth/_global_changes.status": http.StatusUnauthorized,
   258  		"GetIndexes/NoAuth/chicken.status":         http.StatusNotFound,
   259  		"GetIndexes/NoAuth/_duck.status":           http.StatusUnauthorized,
   260  		"GetIndexes/NoAuth/_replicator.status":     http.StatusUnauthorized,
   261  		"GetIndexes/NoAuth/_users.status":          http.StatusUnauthorized,
   262  		"GetIndexes/RW.indexes": []kivik.Index{
   263  			kt.AllDocsIndex,
   264  			{
   265  				DesignDoc: "_design/foo",
   266  				Name:      "bar",
   267  				Type:      "json",
   268  				Definition: map[string]interface{}{
   269  					"fields": []map[string]string{
   270  						{"foo": "asc"},
   271  					},
   272  					"partial_filter_selector": map[string]string{},
   273  				},
   274  			},
   275  		},
   276  
   277  		"DeleteIndex/RW/Admin/group/NotFoundDdoc.status":  http.StatusNotFound,
   278  		"DeleteIndex/RW/Admin/group/NotFoundName.status":  http.StatusNotFound,
   279  		"DeleteIndex/RW/NoAuth/group/NotFoundDdoc.status": http.StatusUnauthorized,
   280  		"DeleteIndex/RW/NoAuth/group/NotFoundName.status": http.StatusUnauthorized,
   281  		"DeleteIndex/RW/NoAuth/group/ValidIndex.status":   http.StatusUnauthorized,
   282  
   283  		"GetReplications/NoAuth.status": http.StatusUnauthorized,
   284  
   285  		"Replicate.NotFoundDB":                                  "http://localhost:5984/foo",
   286  		"Replicate.timeoutSeconds":                              60,
   287  		"Replicate.prefix":                                      "http://localhost:5984/",
   288  		"Replicate/RW/Admin.prefix":                             "http://admin:abc123@localhost:5984/",
   289  		"Replicate/RW/NoAuth.status":                            http.StatusUnauthorized,
   290  		"Replicate/RW/Admin/group/MissingSource/Results.status": http.StatusNotFound,
   291  		"Replicate/RW/Admin/group/MissingTarget/Results.status": http.StatusNotFound,
   292  
   293  		"Query/RW/group/Admin/WithoutDocs/ScanDoc.status": http.StatusBadRequest,
   294  		"Query/RW/group/NoAuth/WithDocs.status":           http.StatusUnauthorized,
   295  		"Query/RW/group/NoAuth/WithoutDocs.status":        http.StatusUnauthorized,
   296  
   297  		"ViewCleanup/RW/NoAuth.status": http.StatusUnauthorized,
   298  
   299  		"Changes/Continuous/RW/group/NoAuth.status": http.StatusUnauthorized,
   300  		"Changes/Normal/RW/group/NoAuth.status":     http.StatusUnauthorized,
   301  		"Changes/Continuous.options": kivik.Params(map[string]interface{}{
   302  			"feed":      "continuous",
   303  			"since":     "now",
   304  			"heartbeat": 6000,
   305  		}),
   306  
   307  		"Copy/RW/group/NoAuth/_design/foo.status": http.StatusUnauthorized,
   308  		"Copy/RW/group/NoAuth/foo.status":         http.StatusUnauthorized,
   309  		"Copy/RW/group/NoAuth/_local/foo.status":  http.StatusUnauthorized,
   310  	})
   311  }
   312  

View as plain text