in internal/mock/alloydb.go [124:217]
func NewFakeInstance(proj, reg, clust, name string, opts ...Option) FakeAlloyDBInstance {
f := FakeAlloyDBInstance{
project: proj,
region: reg,
cluster: clust,
name: name,
ipAddrs: map[string]string{"PRIVATE": "127.0.0.1"},
uid: "00000000-0000-0000-0000-000000000000",
serverName: "00000000-0000-0000-0000-000000000000.server.alloydb",
certExpiry: time.Now().Add(24 * time.Hour),
}
for _, o := range opts {
o(&f)
}
rootTemplate := &x509.Certificate{
SerialNumber: &big.Int{},
Subject: pkix.Name{
CommonName: "root.alloydb",
},
NotBefore: time.Now(),
NotAfter: time.Now().AddDate(0, 0, 1),
IsCA: true,
KeyUsage: x509.KeyUsageCertSign | x509.KeyUsageCRLSign,
BasicConstraintsValid: true,
}
// create a self-signed root certificate
signedRoot, err := x509.CreateCertificate(
rand.Reader, rootTemplate, rootTemplate, &rootCAKey.PublicKey, rootCAKey)
if err != nil {
panic(err)
}
rootCert, err := x509.ParseCertificate(signedRoot)
if err != nil {
panic(err)
}
// create an intermediate CA, signed by the root
// This CA signs all client certs.
intermedTemplate := &x509.Certificate{
SerialNumber: &big.Int{},
Subject: pkix.Name{
CommonName: "client.alloydb",
},
NotBefore: time.Now(),
NotAfter: time.Now().AddDate(0, 0, 1),
IsCA: true,
KeyUsage: x509.KeyUsageCertSign | x509.KeyUsageCRLSign,
BasicConstraintsValid: true,
}
signedIntermed, err := x509.CreateCertificate(
rand.Reader, intermedTemplate, rootCert, &intermedCAKey.PublicKey, rootCAKey)
if err != nil {
panic(err)
}
intermedCert, err := x509.ParseCertificate(signedIntermed)
if err != nil {
panic(err)
}
// create a server certificate, signed by the root
// This is what the server side proxy uses.
serverTemplate := &x509.Certificate{
SerialNumber: &big.Int{},
Subject: pkix.Name{
CommonName: f.serverName,
},
NotBefore: time.Now(),
NotAfter: time.Now().AddDate(0, 0, 1),
IsCA: true,
KeyUsage: x509.KeyUsageCertSign | x509.KeyUsageCRLSign,
BasicConstraintsValid: true,
IPAddresses: []net.IP{net.IPv4(127, 0, 0, 1)},
}
signedServer, err := x509.CreateCertificate(
rand.Reader, serverTemplate, rootCert, &serverKey.PublicKey, rootCAKey)
if err != nil {
panic(err)
}
serverCert, err := x509.ParseCertificate(signedServer)
if err != nil {
panic(err)
}
// save all TLS certificates for later use.
f.rootCACert = rootCert
f.rootKey = rootCAKey
f.intermedCert = intermedCert
f.intermedKey = intermedCAKey
f.serverCert = serverCert
f.serverKey = serverKey
return f
}