| 1803 | } |
| 1804 | |
| 1805 | func CryptoKey(t testing.TB, db database.Store, seed database.CryptoKey) database.CryptoKey { |
| 1806 | t.Helper() |
| 1807 | |
| 1808 | seed.Feature = takeFirst(seed.Feature, database.CryptoKeyFeatureWorkspaceAppsAPIKey) |
| 1809 | |
| 1810 | // An empty string for the secret is interpreted as |
| 1811 | // a caller wanting a new secret to be generated. |
| 1812 | // To generate a key with a NULL secret set Valid=false |
| 1813 | // and String to a non-empty string. |
| 1814 | if seed.Secret.String == "" { |
| 1815 | secret, err := newCryptoKeySecret(seed.Feature) |
| 1816 | require.NoError(t, err, "generate secret") |
| 1817 | seed.Secret = sql.NullString{ |
| 1818 | String: secret, |
| 1819 | Valid: true, |
| 1820 | } |
| 1821 | } |
| 1822 | |
| 1823 | key, err := db.InsertCryptoKey(genCtx, database.InsertCryptoKeyParams{ |
| 1824 | Sequence: takeFirst(seed.Sequence, 123), |
| 1825 | Secret: seed.Secret, |
| 1826 | SecretKeyID: takeFirst(seed.SecretKeyID, sql.NullString{}), |
| 1827 | Feature: seed.Feature, |
| 1828 | StartsAt: takeFirst(seed.StartsAt, dbtime.Now()), |
| 1829 | }) |
| 1830 | require.NoError(t, err, "insert crypto key") |
| 1831 | |
| 1832 | if seed.DeletesAt.Valid { |
| 1833 | key, err = db.UpdateCryptoKeyDeletesAt(genCtx, database.UpdateCryptoKeyDeletesAtParams{ |
| 1834 | Feature: key.Feature, |
| 1835 | Sequence: key.Sequence, |
| 1836 | DeletesAt: sql.NullTime{Time: seed.DeletesAt.Time, Valid: true}, |
| 1837 | }) |
| 1838 | require.NoError(t, err, "update crypto key deletes_at") |
| 1839 | } |
| 1840 | return key |
| 1841 | } |
| 1842 | |
| 1843 | func ProvisionerJobTimings(t testing.TB, db database.Store, build database.WorkspaceBuild, count int) []database.ProvisionerJobTiming { |
| 1844 | timings := make([]database.ProvisionerJobTiming, count) |