code.gitea.io/gitea@v1.21.7/models/migrations/v1_17/v221_test.go (about) 1 // Copyright 2022 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package v1_17 //nolint 5 6 import ( 7 "encoding/base32" 8 "testing" 9 10 "code.gitea.io/gitea/models/migrations/base" 11 12 "github.com/stretchr/testify/assert" 13 ) 14 15 func Test_StoreWebauthnCredentialIDAsBytes(t *testing.T) { 16 // Create webauthnCredential table 17 type WebauthnCredential struct { 18 ID int64 `xorm:"pk autoincr"` 19 Name string 20 LowerName string `xorm:"unique(s)"` 21 UserID int64 `xorm:"INDEX unique(s)"` 22 CredentialID string `xorm:"INDEX VARCHAR(410)"` 23 PublicKey []byte 24 AttestationType string 25 AAGUID []byte 26 SignCount uint32 `xorm:"BIGINT"` 27 CloneWarning bool 28 } 29 30 type ExpectedWebauthnCredential struct { 31 ID int64 `xorm:"pk autoincr"` 32 CredentialID string // CredentialID is at most 1023 bytes as per spec released 20 July 2022 33 } 34 35 type ConvertedWebauthnCredential struct { 36 ID int64 `xorm:"pk autoincr"` 37 CredentialIDBytes []byte `xorm:"VARBINARY(1024)"` // CredentialID is at most 1023 bytes as per spec released 20 July 2022 38 } 39 40 // Prepare and load the testing database 41 x, deferable := base.PrepareTestEnv(t, 0, new(WebauthnCredential), new(ExpectedWebauthnCredential)) 42 defer deferable() 43 if x == nil || t.Failed() { 44 return 45 } 46 47 if err := StoreWebauthnCredentialIDAsBytes(x); err != nil { 48 assert.NoError(t, err) 49 return 50 } 51 52 expected := []ExpectedWebauthnCredential{} 53 if err := x.Table("expected_webauthn_credential").Asc("id").Find(&expected); !assert.NoError(t, err) { 54 return 55 } 56 57 got := []ConvertedWebauthnCredential{} 58 if err := x.Table("webauthn_credential").Select("id, credential_id_bytes").Asc("id").Find(&got); !assert.NoError(t, err) { 59 return 60 } 61 62 for i, e := range expected { 63 credIDBytes, _ := base32.HexEncoding.DecodeString(e.CredentialID) 64 assert.Equal(t, credIDBytes, got[i].CredentialIDBytes) 65 } 66 }