You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

v221_test.go 1.9KB

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