Skip to content

Commit

Permalink
feat(shm): add e2e tests
Browse files Browse the repository at this point in the history
Signed-off-by: Artur Troian <[email protected]>
  • Loading branch information
troian committed Mar 20, 2024
1 parent 230b475 commit fb2b213
Show file tree
Hide file tree
Showing 6 changed files with 188 additions and 0 deletions.
5 changes: 5 additions & 0 deletions _run/kube/provider.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,8 @@ attributes:
value: true
- key: capabilities/storage/2/class
value: beta2
- key: capabilities/storage/3/class
value: ram
- key: capabilities/storage/3/persistent
value: false

1 change: 1 addition & 0 deletions integration/e2e_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -579,6 +579,7 @@ func TestIntegrationTestSuite(t *testing.T) {
suite.Run(t, new(E2EPersistentStorageDefault))
suite.Run(t, new(E2EPersistentStorageBeta2))
suite.Run(t, new(E2EPersistentStorageDeploymentUpdate))
suite.Run(t, new(E2EStorageClassRam))
suite.Run(t, new(E2EMigrateHostname))
suite.Run(t, new(E2EJWTServer))
suite.Run(t, new(E2ECustomCurrency))
Expand Down
136 changes: 136 additions & 0 deletions integration/storageclassram_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
//go:build e2e

package integration

import (
"context"
"fmt"
"path/filepath"
"time"

"github.com/cosmos/cosmos-sdk/client/flags"
sdktest "github.com/cosmos/cosmos-sdk/testutil"
"github.com/gyuho/linux-inspect/df"

dtypes "github.com/akash-network/akash-api/go/node/deployment/v1beta3"
mtypes "github.com/akash-network/akash-api/go/node/market/v1beta4"
clitestutil "github.com/akash-network/node/testutil/cli"
deploycli "github.com/akash-network/node/x/deployment/client/cli"
mcli "github.com/akash-network/node/x/market/client/cli"

ptestutil "github.com/akash-network/provider/testutil/provider"
)

type E2EStorageClassRam struct {
IntegrationTestSuite
}

type dfOutput struct {
Mount string `json:"mount"`
Spacetotal string `json:"spacetotal"`
}

type dfResult []dfOutput

func (s *E2EStorageClassRam) TestRAM() {
deploymentPath, err := filepath.Abs("../testdata/deployment/deployment-v2-storage-ram.yaml")
s.Require().NoError(err)

deploymentID := dtypes.DeploymentID{
Owner: s.keyTenant.GetAddress().String(),
DSeq: uint64(100),
}

// Create Deployments
res, err := deploycli.TxCreateDeploymentExec(
s.validator.ClientCtx,
s.keyTenant.GetAddress(),
deploymentPath,
cliGlobalFlags(fmt.Sprintf("--dseq=%v", deploymentID.DSeq))...,
)
s.Require().NoError(err)
s.Require().NoError(s.waitForBlocksCommitted(7))
clitestutil.ValidateTxSuccessful(s.T(), s.validator.ClientCtx, res.Bytes())

bidID := mtypes.MakeBidID(
mtypes.MakeOrderID(dtypes.MakeGroupID(deploymentID, 1), 1),
s.keyProvider.GetAddress(),
)

_, err = mcli.QueryBidExec(s.validator.ClientCtx, bidID)
s.Require().NoError(err)

_, err = mcli.TxCreateLeaseExec(
s.validator.ClientCtx,
bidID,
s.keyTenant.GetAddress(),
cliGlobalFlags()...,
)
s.Require().NoError(err)
s.Require().NoError(s.waitForBlocksCommitted(2))
clitestutil.ValidateTxSuccessful(s.T(), s.validator.ClientCtx, res.Bytes())

lid := bidID.LeaseID()

// Send Manifest to Provider ----------------------------------------------
_, err = ptestutil.TestSendManifest(
s.validator.ClientCtx.WithOutputFormat("json"),
lid.BidID(),
deploymentPath,
fmt.Sprintf("--%s=%s", flags.FlagFrom, s.keyTenant.GetAddress().String()),
fmt.Sprintf("--%s=%s", flags.FlagHome, s.validator.ClientCtx.HomeDir),
)
s.Require().NoError(err)
s.Require().NoError(s.waitForBlocksCommitted(2))

var out sdktest.BufferWriter
leaseShellCtx, cancel := context.WithTimeout(s.ctx, time.Minute)
defer cancel()

extraArgs := []string{
fmt.Sprintf("--%s=%s", flags.FlagFrom, s.keyTenant.GetAddress().String()),
fmt.Sprintf("--%s=%s", flags.FlagHome, s.validator.ClientCtx.HomeDir),
}

logged := make(map[string]struct{})

cmd := `df --all --sync --block-size=1024 --output=source,target,fstype,file,itotal,iavail,iused,ipcent,size,avail,used,pcent`

// Loop until we get a shell or the context times out
for {
select {
case <-leaseShellCtx.Done():
s.T().Fatalf("context is done while trying to run lease-shell: %v", leaseShellCtx.Err())
return
default:
}
out, err = ptestutil.TestLeaseShell(leaseShellCtx, s.validator.ClientCtx.WithOutputFormat("json"), extraArgs, lid, 0, false, false, "web", cmd)
if err != nil {
_, hasBeenLogged := logged[err.Error()]
if !hasBeenLogged {
// Don't spam an error message in a test, that is very annoying
s.T().Logf("encountered %v, waiting before next attempt", err)
logged[err.Error()] = struct{}{}
}
time.Sleep(100 * time.Millisecond)
continue // Try again until the context times out
}
s.Require().NotNil(s.T(), out)
break
}

dfRes, err := df.Parse(out.String())
s.Require().NoError(err)

var found *df.Row

for i := range dfRes {
if dfRes[i].MountedOn == "/dev/shm" {
found = &dfRes[i]
break
}
}

s.Require().NotNil(found)
s.Require().Equal(int64(131072), found.TotalBlocks)
}
4 changes: 4 additions & 0 deletions integration/test_helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ attributes:
value: true
- key: capabilities/storage/2/class
value: beta2
- key: capabilities/storage/3/persistent
value: false
- key: capabilities/storage/3/class
value: ram
`
)

Expand Down
1 change: 1 addition & 0 deletions script/usd_pricing_oracle.sh
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ STORAGE_USD_SCALE[default]=0.02
STORAGE_USD_SCALE[beta1]=0.02
STORAGE_USD_SCALE[beta2]=0.03
STORAGE_USD_SCALE[beta3]=0.04
STORAGE_USD_SCALE[ram]=0.02 # ram storage class is for tmp disks like /dev/shm, making assumption for now pricing is same of for regular RAM

# used later for validation
MAX_INT64=9223372036854775807
Expand Down
41 changes: 41 additions & 0 deletions testdata/deployment/deployment-v2-storage-ram.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
---
version: "2.0"
services:
web:
image: ghcr.io/akash-network/e2e-test
expose:
- port: 8080
as: 80
to:
- global: true
accept:
- webdistest.localhost
params:
storage:
shm:
mount: /dev/shm
profiles:
compute:
web:
resources:
cpu:
units: "0.01"
memory:
size: "128Mi"
storage:
- size: "512Mi"
- name: shm
size: "256Mi"
attributes:
class: ram
placement:
global:
pricing:
web:
denom: uakt
amount: 10
deployment:
web:
global:
profile: web
count: 1

0 comments on commit fb2b213

Please sign in to comment.