...

Source file src/github.com/ory/fosite/scope_strategy_test.go

Documentation: github.com/ory/fosite

     1  /*
     2   * Copyright © 2015-2018 Aeneas Rekkas <aeneas+oss@aeneas.io>
     3   *
     4   * Licensed under the Apache License, Version 2.0 (the "License");
     5   * you may not use this file except in compliance with the License.
     6   * You may obtain a copy of the License at
     7   *
     8   *     http://www.apache.org/licenses/LICENSE-2.0
     9   *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.
    15   *
    16   * @author		Aeneas Rekkas <aeneas+oss@aeneas.io>
    17   * @copyright 	2015-2018 Aeneas Rekkas <aeneas+oss@aeneas.io>
    18   * @license 	Apache-2.0
    19   *
    20   */
    21  
    22  package fosite
    23  
    24  import (
    25  	"strings"
    26  	"testing"
    27  
    28  	"github.com/stretchr/testify/assert"
    29  )
    30  
    31  func TestHierarchicScopeStrategy(t *testing.T) {
    32  	var strategy ScopeStrategy = HierarchicScopeStrategy
    33  	var scopes = []string{}
    34  
    35  	assert.False(t, strategy(scopes, "foo.bar.baz"))
    36  	assert.False(t, strategy(scopes, "foo.bar"))
    37  	assert.False(t, strategy(scopes, "foo"))
    38  
    39  	scopes = []string{"foo.bar", "bar.baz", "baz.baz.1", "baz.baz.2", "baz.baz.3", "baz.baz.baz"}
    40  	assert.True(t, strategy(scopes, "foo.bar.baz"))
    41  	assert.True(t, strategy(scopes, "baz.baz.baz"))
    42  	assert.True(t, strategy(scopes, "foo.bar"))
    43  	assert.False(t, strategy(scopes, "foo"))
    44  
    45  	assert.True(t, strategy(scopes, "bar.baz"))
    46  	assert.True(t, strategy(scopes, "bar.baz.zad"))
    47  	assert.False(t, strategy(scopes, "bar"))
    48  	assert.False(t, strategy(scopes, "baz"))
    49  
    50  	scopes = []string{"fosite.keys.create", "fosite.keys.get", "fosite.keys.delete", "fosite.keys.update"}
    51  	assert.True(t, strategy(scopes, "fosite.keys.delete"))
    52  	assert.True(t, strategy(scopes, "fosite.keys.get"))
    53  	assert.True(t, strategy(scopes, "fosite.keys.get"))
    54  	assert.True(t, strategy(scopes, "fosite.keys.update"))
    55  
    56  	scopes = []string{"hydra", "openid", "offline"}
    57  	assert.False(t, strategy(scopes, "foo.bar"))
    58  	assert.False(t, strategy(scopes, "foo"))
    59  	assert.True(t, strategy(scopes, "hydra"))
    60  	assert.True(t, strategy(scopes, "hydra.bar"))
    61  	assert.True(t, strategy(scopes, "openid"))
    62  	assert.True(t, strategy(scopes, "openid.baz.bar"))
    63  	assert.True(t, strategy(scopes, "offline"))
    64  	assert.True(t, strategy(scopes, "offline.baz.bar.baz"))
    65  }
    66  
    67  func TestWildcardScopeStrategy(t *testing.T) {
    68  	var strategy ScopeStrategy = WildcardScopeStrategy
    69  	var scopes = []string{}
    70  
    71  	assert.False(t, strategy(scopes, "foo.bar.baz"))
    72  	assert.False(t, strategy(scopes, "foo.bar"))
    73  
    74  	scopes = []string{"*"}
    75  	assert.False(t, strategy(scopes, ""))
    76  	assert.True(t, strategy(scopes, "asdf"))
    77  	assert.True(t, strategy(scopes, "asdf.asdf"))
    78  
    79  	scopes = []string{"foo"}
    80  	assert.False(t, strategy(scopes, "*"))
    81  	assert.False(t, strategy(scopes, "foo.*"))
    82  	assert.False(t, strategy(scopes, "fo*"))
    83  	assert.True(t, strategy(scopes, "foo"))
    84  
    85  	scopes = []string{"foo*"}
    86  	assert.False(t, strategy(scopes, "foo"))
    87  	assert.False(t, strategy(scopes, "fooa"))
    88  	assert.False(t, strategy(scopes, "fo"))
    89  	assert.True(t, strategy(scopes, "foo*"))
    90  
    91  	scopes = []string{"foo.*"}
    92  	assert.True(t, strategy(scopes, "foo.bar"))
    93  	assert.True(t, strategy(scopes, "foo.baz"))
    94  	assert.True(t, strategy(scopes, "foo.bar.baz"))
    95  	assert.False(t, strategy(scopes, "foo"))
    96  
    97  	scopes = []string{"foo.*.baz"}
    98  	assert.True(t, strategy(scopes, "foo.*.baz"))
    99  	assert.True(t, strategy(scopes, "foo.bar.baz"))
   100  	assert.False(t, strategy(scopes, "foo..baz"))
   101  	assert.False(t, strategy(scopes, "foo.baz"))
   102  	assert.False(t, strategy(scopes, "foo"))
   103  	assert.False(t, strategy(scopes, "foo.bar.bar"))
   104  
   105  	scopes = []string{"foo.*.bar.*"}
   106  	assert.True(t, strategy(scopes, "foo.baz.bar.baz"))
   107  	assert.False(t, strategy(scopes, "foo.baz.baz.bar.baz"))
   108  	assert.True(t, strategy(scopes, "foo.baz.bar.bar.bar"))
   109  	assert.False(t, strategy(scopes, "foo.baz.bar"))
   110  	assert.True(t, strategy(scopes, "foo.*.bar.*.*.*"))
   111  	assert.True(t, strategy(scopes, "foo.1.bar.1.2.3.4.5"))
   112  
   113  	scopes = []string{"foo.*.bar"}
   114  	assert.True(t, strategy(scopes, "foo.bar.bar"))
   115  	assert.False(t, strategy(scopes, "foo.bar.bar.bar"))
   116  	assert.False(t, strategy(scopes, "foo..bar"))
   117  	assert.False(t, strategy(scopes, "foo.bar..bar"))
   118  
   119  	scopes = []string{"foo.*.bar.*.baz.*"}
   120  	assert.False(t, strategy(scopes, "foo.*.*"))
   121  	assert.False(t, strategy(scopes, "foo.*.bar"))
   122  	assert.False(t, strategy(scopes, "foo.baz.*"))
   123  	assert.False(t, strategy(scopes, "foo.baz.bar"))
   124  	assert.False(t, strategy(scopes, "foo.b*.bar"))
   125  	assert.True(t, strategy(scopes, "foo.bar.bar.baz.baz.baz"))
   126  	assert.True(t, strategy(scopes, "foo.bar.bar.baz.baz.baz.baz"))
   127  	assert.False(t, strategy(scopes, "foo.bar.bar.baz.baz"))
   128  	assert.False(t, strategy(scopes, "foo.bar.baz.baz.baz.bar"))
   129  
   130  	scopes = strings.Fields("hydra.* openid offline  hydra")
   131  	assert.True(t, strategy(scopes, "hydra.clients"))
   132  	assert.True(t, strategy(scopes, "hydra.clients.get"))
   133  	assert.True(t, strategy(scopes, "hydra"))
   134  	assert.True(t, strategy(scopes, "offline"))
   135  	assert.True(t, strategy(scopes, "openid"))
   136  }
   137  
   138  func TestExactScopeStrategy2ScopeStrategy(t *testing.T) {
   139  	var strategy ScopeStrategy = ExactScopeStrategy
   140  
   141  	scopes := []string{"foo.bar.baz", "foo.bar"}
   142  	assert.True(t, strategy(scopes, "foo.bar.baz"))
   143  	assert.True(t, strategy(scopes, "foo.bar"))
   144  
   145  	assert.False(t, strategy(scopes, "foo.bar.baz.baz"))
   146  	assert.False(t, strategy(scopes, "foo.bar.bar"))
   147  
   148  	assert.False(t, strategy(scopes, "foo.bar.baz1"))
   149  	assert.False(t, strategy(scopes, "foo.bar1"))
   150  
   151  	assert.False(t, strategy([]string{}, "foo"))
   152  }
   153  

View as plain text