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  }