github.com/lianghucheng/zrddz@v0.0.0-20200923083010-c71f680932e2/src/gopkg.in/mgo.v2/internal/scram/scram_test.go (about)

     1  package scram_test
     2  
     3  import (
     4  	"crypto/sha1"
     5  	"testing"
     6  
     7  	. "gopkg.in/check.v1"
     8  	"gopkg.in/mgo.v2/internal/scram"
     9  	"strings"
    10  )
    11  
    12  var _ = Suite(&S{})
    13  
    14  func Test(t *testing.T) { TestingT(t) }
    15  
    16  type S struct{}
    17  
    18  var tests = [][]string{{
    19  	"U: user pencil",
    20  	"N: fyko+d2lbbFgONRv9qkxdawL",
    21  	"C: n,,n=user,r=fyko+d2lbbFgONRv9qkxdawL",
    22  	"S: r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,s=QSXCR+Q6sek8bf92,i=4096",
    23  	"C: c=biws,r=fyko+d2lbbFgONRv9qkxdawL3rfcNHYJY1ZVvWVs7j,p=v0X8v3Bz2T0CJGbJQyF0X+HI4Ts=",
    24  	"S: v=rmF9pqV8S7suAoZWja4dJRkFsKQ=",
    25  }, {
    26  	"U: root fe8c89e308ec08763df36333cbf5d3a2",
    27  	"N: OTcxNDk5NjM2MzE5",
    28  	"C: n,,n=root,r=OTcxNDk5NjM2MzE5",
    29  	"S: r=OTcxNDk5NjM2MzE581Ra3provgG0iDsMkDiIAlrh4532dDLp,s=XRDkVrFC9JuL7/F4tG0acQ==,i=10000",
    30  	"C: c=biws,r=OTcxNDk5NjM2MzE581Ra3provgG0iDsMkDiIAlrh4532dDLp,p=6y1jp9R7ETyouTXS9fW9k5UHdBc=",
    31  	"S: v=LBnd9dUJRxdqZiEq91NKP3z/bHA=",
    32  }}
    33  
    34  func (s *S) TestExamples(c *C) {
    35  	for _, steps := range tests {
    36  		if len(steps) < 2 || len(steps[0]) < 3 || !strings.HasPrefix(steps[0], "U: ") {
    37  			c.Fatalf("Invalid test: %#v", steps)
    38  		}
    39  		auth := strings.Fields(steps[0][3:])
    40  		client := scram.NewClient(sha1.New, auth[0], auth[1])
    41  		first, done := true, false
    42  		c.Logf("-----")
    43  		c.Logf("%s", steps[0])
    44  		for _, step := range steps[1:] {
    45  			c.Logf("%s", step)
    46  			switch step[:3] {
    47  			case "N: ":
    48  				client.SetNonce([]byte(step[3:]))
    49  			case "C: ":
    50  				if first {
    51  					first = false
    52  					done = client.Step(nil)
    53  				}
    54  				c.Assert(done, Equals, false)
    55  				c.Assert(client.Err(), IsNil)
    56  				c.Assert(string(client.Out()), Equals, step[3:])
    57  			case "S: ":
    58  				first = false
    59  				done = client.Step([]byte(step[3:]))
    60  			default:
    61  				panic("invalid test line: " + step)
    62  			}
    63  		}
    64  		c.Assert(done, Equals, true)
    65  		c.Assert(client.Err(), IsNil)
    66  	}
    67  }