Categorygithub.com/sgaunet/tcbs
repositorypackage
0.1.0
Repository: https://github.com/sgaunet/tcbs.git
Documentation: pkg.go.dev

# README

This golang module offers some basic functions to spin up some containers. It uses testcontainers.

POSTGRESQL

  // create the container
  newpgDB, err := tcbs.NewPostgresContainer("postgres", "password", "postgres")
	if err != nil {
		t.Fatalf("could not create postgres container: %v", err)
	}
  // defer the stop of the container
	defer newpgDB.Terminate(context.Background())

  // Open a connection
	db, err := sql.Open("postgres", newpgDB.GetDSNString())
	if err != nil {
		t.Fatalf("could not open postgres connection: %v", err)
	}
	defer db.Close()
	err = db.Ping()
	if err != nil {
		t.Fatalf("could not ping postgres: %v", err)
	}

REDIS

  redisC, err := tcbs.NewRedisContainer("", "")
	if err != nil {
		t.Fatalf("could not create redis container: %v", err)
	}
	defer redisC.Terminate(context.Background())

	ctx := context.Background()
	redisClient := redis.NewClient(&redis.Options{
		Username: redisC.GetRedisUser(),
		Password: redisC.GetRedisPassword(),
		Addr:     redisC.GetRedisHost() + ":" + redisC.GetRedisPort(),
	})
	defer redisClient.Close()

	_, err = redisClient.Ping(ctx).Result()

SFTP

  container, err := tcbs.NewTestSFTPServer()
	if err!= nil {
		log.Fatal(err)
	}
	defer container.Terminate()
	// init ssh client
	auth := goph.Password(container.GetPassword())
	host := strings.Split(container.GetEndpoint(), ":")[0]
	port := strings.Split(container.GetEndpoint(), ":")[1]
	portUint, err := strconv.ParseUint(port, 10, 32)
	if err != nil {
		log.Fatal(err)
	}
	client, err := goph.NewConn(&goph.Config{
		User:     container.GetUsername(),
		Addr:     host,
		Port:     uint(portUint),
		Auth:     auth,
		Callback: VerifyHost,
	})
	if err != nil {
		log.Fatal(err)
	}
	client.Close()
}

// no fingerprint check
func VerifyHost(host string, remote net.Addr, key ssh.PublicKey) error {
	// return goph.AddKnownHost(host, remote, key, "")
	return nil
}

SMTP

	container, err := tcbs.NewTestSMTPServer()
	if err != nil {
		t.Fatalf("could not create smtp container: %v", err)
	}
	defer container.Terminate()

	// ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(5*time.Second))
	// defer cancel()
	SMTPClient := mail.NewSMTPClient()
	SMTPClient.Host = container.GetSMTPHost()
	SMTPClient.Port = container.GetSMTPPortInt()
	SMTPClient.Username = container.GetSMTPUser()
	SMTPClient.Password = container.GetSMTPPassword()
	// SMTPClient.Encryption = mail.EncryptionTLS
	SMTPClient.Encryption = mail.EncryptionNone
	SMTPClient.KeepAlive = true
	SMTPClient.ConnectTimeout = 10 * time.Second
	SMTPClient.SendTimeout = 10 * time.Second
	SMTPClient.TLSConfig = &tls.Config{InsecureSkipVerify: true}

	client, err := SMTPClient.Connect()
	if err != nil {
		t.Fatalf("Failed to connect to SMTP server: %v", err)
	}
	defer client.Close()
	...