github.com/angryronald/go-kit@v0.0.0-20240505173814-ff2bd9c79dbf/test/docker/vault/vault.deprecated.go (about)

     1  package vault
     2  
     3  /*
     4  import (
     5  	"context"
     6  	"fmt"
     7  	"log"
     8  	"net/http"
     9  	"os"
    10  	"time"
    11  
    12  	"github.com/hashicorp/vault/api"
    13  )
    14  
    15  // ref: https://github.com/PolarGeospatialCenter/dockertest
    16  
    17  const vaultTestRootToken = "701432d1-00e7-7c94-10c4-8450ab3c4b31"
    18  
    19  type Instance struct {
    20  	config *api.Config
    21  	*Container
    22  }
    23  
    24  var activeContainer *Container
    25  
    26  func init() {
    27  	os.Setenv("VAULT_TOKEN", vaultTestRootToken)
    28  }
    29  
    30  func Run(ctx context.Context) (*Instance, error) {
    31  	instance := &Instance{
    32  		Container: &Container{
    33  			Image: "docker.io/hashicorp/vault",
    34  			Cmd:   []string{"vault", "server", "-dev", "-dev-root-token-id", vaultTestRootToken, "-dev-listen-address", "0.0.0.0:8200"},
    35  		},
    36  	}
    37  
    38  	err := instance.Container.Run(ctx)
    39  	if err != nil {
    40  		return nil, err
    41  	}
    42  
    43  	port, err := instance.Container.GetPort(ctx, "8200/tcp")
    44  	if err != nil {
    45  		return nil, err
    46  	}
    47  
    48  	instance.config = api.DefaultConfig()
    49  	instance.config.Address = fmt.Sprintf("http://0.0.0.0:%s", port)
    50  
    51  	timeout := time.After(10 * time.Second)
    52  	checkInterval := time.Tick(50 * time.Millisecond)
    53  	for {
    54  		select {
    55  		case <-timeout:
    56  			return nil, fmt.Errorf("vault failed to start after 10 seconds")
    57  		case <-checkInterval:
    58  			if instance.running() {
    59  				return instance, nil
    60  			}
    61  		}
    62  	}
    63  }
    64  
    65  func (i *Instance) running() bool {
    66  	c := http.Client{}
    67  	resp, err := c.Get(fmt.Sprintf("%s/v1/sys/seal-status", i.Config().Address))
    68  	return err == nil && resp.StatusCode == 200
    69  }
    70  
    71  func (i *Instance) Config() *api.Config {
    72  	return i.config
    73  }
    74  
    75  func (i *Instance) RootToken() string {
    76  	return vaultTestRootToken
    77  }
    78  
    79  func GenerateInstance(data map[string]interface{}) (*api.Client, *api.Secret) {
    80  	ctx := context.Background()
    81  	instance, err := Run(ctx)
    82  	if err != nil {
    83  		log.Fatalf("unable to create vault instance: %v", err)
    84  	}
    85  	// defer instance.Container.Stop(ctx)
    86  
    87  	client, err := api.NewClient(instance.Config())
    88  	if err != nil {
    89  		defer instance.Container.Stop(ctx)
    90  		log.Fatalf("Unable to create vault client: %v", err)
    91  	}
    92  
    93  	client.SetToken(instance.RootToken())
    94  
    95  	newdata := make(map[string]interface{})
    96  	newdata["data"] = data
    97  	_, err = client.Logical().Write("secret/data/test", newdata)
    98  	if err != nil {
    99  		defer instance.Container.Stop(ctx)
   100  		log.Fatalf("Unable to write test value to vault: %v", err)
   101  	}
   102  
   103  	secret, err := client.Logical().Read("secret/data/test")
   104  	if err != nil {
   105  		defer instance.Container.Stop(ctx)
   106  		log.Fatalf("Unable to read test value from vault: %v", err)
   107  	}
   108  
   109  	activeContainer = instance.Container
   110  
   111  	return client, secret
   112  }
   113  
   114  func RemoveInstance() error {
   115  	return activeContainer.Stop(context.Background())
   116  }
   117  */