close up shot of keyboard buttons

Como fazer fuzz test em requests HTTP (parte 2)

Na primeira parte desse post, vimos como utilizar o fuzz test para gerar payloads automaticamente em nossos testes, o que nos ajudou a encontrar problemas quando o payload não vinha no formato que esperávamos.

Nessa segunda parte, vamos utilizar o fuzz para gerar os inputs que serão utilizados nos campos de um payload correto.

Utilizando o mesmo código do post anterior, antes de começar, vamos fazer uma pequena mudança na validação de e-mail. Além de validar se ele foi preenchido, vamos validar se o e-mail é válido.

Para isso, vamos criar um novo erro e um else para quando o valor do e-mail não esteja vazio.

...

ErrEmailRequired = errors.New("Email is required")

ErrEmailInvalid = errors.New("Email is invalid")

...

if p.Email == "" {
		return ErrEmailRequired
} else {
		rgx := regexp.MustCompile("^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:.[a-zA-Z0-9-]+)*$")
		if !rgx.MatchString(p.Email) {
			return ErrEmailInvalid
		}
}
...
Leia mais »

O que é e como usar a nova constraint comparable

Desde a versão 1.18 do Golang, uma nova constraint está disponível para nos ajudar no dia a dia de trabalho.

Nesse post vamos explorar essa constraint para entender o que ela é e onde podemos utiliza-lá.

De forma bem simples, a constraint comparable é uma interface para todos os tipos onde podemos utilizar == ou != para compará-los, ou seja, podemos utilizá-la para ints, floats, booleans, strings, ponteiros, channels, structs onde todos os campos são comparáveis e arrays de tipos comparáveis.

Abaixo você pode ver um pequeno exemplo de sua utilização em uma função com generics.

Leia mais »

Como utilizar generics em structs

A partir da versão 1.18 do Go, FINALMENTE temos o generics disponível para utilização. Em outros posts, que vou deixar aqui em baixo, já abordamos como utilizar generics em funções, como utilizar a contraint comparable e fizemos um pequeno benchmark para ver a diferença com funções comuns.

Essa semana enquanto fuçava no código fonte do Go, descobri que também podemos utilizar essa maravilha em structs.

Para demonstrar como utiliza-lo, vamos criar uma struct para fazer cache das structs PessoaFisica e PessoaJuridica.

Leia mais »