150 lines
4.5 KiB
Go
150 lines
4.5 KiB
Go
|
package resources_test
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
"time"
|
||
|
|
||
|
"cloud.o-forge.io/core/oc-lib/models/common/models"
|
||
|
"cloud.o-forge.io/core/oc-lib/models/common/pricing"
|
||
|
"cloud.o-forge.io/core/oc-lib/tools"
|
||
|
"github.com/stretchr/testify/assert"
|
||
|
|
||
|
"cloud.o-forge.io/core/oc-lib/models/resources"
|
||
|
)
|
||
|
|
||
|
func TestStorageResource_GetType(t *testing.T) {
|
||
|
res := &resources.StorageResource{}
|
||
|
assert.Equal(t, tools.STORAGE_RESOURCE.String(), res.GetType())
|
||
|
}
|
||
|
|
||
|
func TestStorageResource_GetAccessor(t *testing.T) {
|
||
|
res := &resources.StorageResource{}
|
||
|
req := &tools.APIRequest{}
|
||
|
accessor := res.GetAccessor(req)
|
||
|
assert.NotNil(t, accessor)
|
||
|
}
|
||
|
|
||
|
func TestStorageResource_ConvertToPricedResource_ValidType(t *testing.T) {
|
||
|
res := &resources.StorageResource{}
|
||
|
res.AbstractInstanciatedResource.CreatorID = "creator"
|
||
|
res.AbstractInstanciatedResource.UUID = "res-id"
|
||
|
priced := res.ConvertToPricedResource(tools.STORAGE_RESOURCE, &tools.APIRequest{})
|
||
|
assert.NotNil(t, priced)
|
||
|
assert.IsType(t, &resources.PricedStorageResource{}, priced)
|
||
|
}
|
||
|
|
||
|
func TestStorageResource_ConvertToPricedResource_InvalidType(t *testing.T) {
|
||
|
res := &resources.StorageResource{}
|
||
|
priced := res.ConvertToPricedResource(tools.COMPUTE_RESOURCE, &tools.APIRequest{})
|
||
|
assert.Nil(t, priced)
|
||
|
}
|
||
|
|
||
|
func TestStorageResourceInstance_ClearEnv(t *testing.T) {
|
||
|
inst := &resources.StorageResourceInstance{
|
||
|
Credentials: &resources.Credentials{Login: "test"},
|
||
|
ResourceInstance: resources.ResourceInstance[*resources.StorageResourcePartnership]{
|
||
|
Env: []models.Param{{Attr: "A"}},
|
||
|
Inputs: []models.Param{{Attr: "B"}},
|
||
|
Outputs: []models.Param{{Attr: "C"}},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
inst.ClearEnv()
|
||
|
assert.Nil(t, inst.Credentials)
|
||
|
assert.Empty(t, inst.Env)
|
||
|
assert.Empty(t, inst.Inputs)
|
||
|
assert.Empty(t, inst.Outputs)
|
||
|
}
|
||
|
|
||
|
func TestStorageResourceInstance_StoreDraftDefault(t *testing.T) {
|
||
|
inst := &resources.StorageResourceInstance{
|
||
|
Source: "my-source",
|
||
|
ResourceInstance: resources.ResourceInstance[*resources.StorageResourcePartnership]{
|
||
|
Env: []models.Param{},
|
||
|
},
|
||
|
}
|
||
|
|
||
|
inst.StoreDraftDefault()
|
||
|
assert.Len(t, inst.Env, 1)
|
||
|
assert.Equal(t, "source", inst.Env[0].Attr)
|
||
|
assert.Equal(t, "my-source", inst.Env[0].Value)
|
||
|
assert.True(t, inst.Env[0].Readonly)
|
||
|
}
|
||
|
|
||
|
func TestStorageResourcePricingStrategy_GetQuantity(t *testing.T) {
|
||
|
tests := []struct {
|
||
|
strategy resources.StorageResourcePricingStrategy
|
||
|
dataGB float64
|
||
|
expect float64
|
||
|
}{
|
||
|
{resources.PER_DATA_STORED, 1.2, 1.2},
|
||
|
{resources.PER_TB_STORED, 1.2, 1200},
|
||
|
{resources.PER_GB_STORED, 2.5, 2.5},
|
||
|
{resources.PER_MB_STORED, 1.0, 1000},
|
||
|
{resources.PER_KB_STORED, 0.1, 100000},
|
||
|
}
|
||
|
|
||
|
for _, tt := range tests {
|
||
|
q, err := tt.strategy.GetQuantity(tt.dataGB)
|
||
|
assert.NoError(t, err)
|
||
|
assert.Equal(t, tt.expect, q)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestStorageResourcePricingStrategy_GetQuantity_Invalid(t *testing.T) {
|
||
|
invalid := resources.StorageResourcePricingStrategy(99)
|
||
|
q, err := invalid.GetQuantity(1.0)
|
||
|
assert.Error(t, err)
|
||
|
assert.Equal(t, 0.0, q)
|
||
|
}
|
||
|
|
||
|
func TestPricedStorageResource_GetPrice_NoProfiles(t *testing.T) {
|
||
|
res := &resources.PricedStorageResource{
|
||
|
PricedResource: resources.PricedResource{
|
||
|
ResourceID: "res-id",
|
||
|
},
|
||
|
}
|
||
|
_, err := res.GetPrice()
|
||
|
assert.Error(t, err)
|
||
|
}
|
||
|
|
||
|
func TestPricedStorageResource_GetPrice_WithPricing(t *testing.T) {
|
||
|
now := time.Now()
|
||
|
end := now.Add(2 * time.Hour)
|
||
|
profile := &resources.StorageResourcePricingProfile{
|
||
|
ExploitPricingProfile: pricing.ExploitPricingProfile[resources.StorageResourcePricingStrategy]{
|
||
|
AccessPricingProfile: pricing.AccessPricingProfile[resources.StorageResourcePricingStrategy]{
|
||
|
Pricing: pricing.PricingStrategy[resources.StorageResourcePricingStrategy]{
|
||
|
BuyingStrategy: pricing.PAY_PER_USE,
|
||
|
Price: 42.0,
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
res := &resources.PricedStorageResource{
|
||
|
PricedResource: resources.PricedResource{
|
||
|
UsageStart: &now,
|
||
|
UsageEnd: &end,
|
||
|
PricingProfiles: []pricing.PricingProfileITF{profile},
|
||
|
},
|
||
|
UsageStorageGB: 1.0,
|
||
|
}
|
||
|
price, err := res.GetPrice()
|
||
|
assert.NoError(t, err)
|
||
|
assert.Equal(t, 42.0, price)
|
||
|
}
|
||
|
|
||
|
func TestStorageResourcePricingProfile_IsPurchased(t *testing.T) {
|
||
|
p := &resources.StorageResourcePricingProfile{
|
||
|
ExploitPricingProfile: pricing.ExploitPricingProfile[resources.StorageResourcePricingStrategy]{
|
||
|
AccessPricingProfile: pricing.AccessPricingProfile[resources.StorageResourcePricingStrategy]{
|
||
|
Pricing: pricing.PricingStrategy[resources.StorageResourcePricingStrategy]{BuyingStrategy: pricing.PAY_PER_USE},
|
||
|
},
|
||
|
},
|
||
|
}
|
||
|
assert.False(t, p.IsPurchased())
|
||
|
|
||
|
p.Pricing.BuyingStrategy = pricing.UNLIMITED
|
||
|
assert.True(t, p.IsPurchased())
|
||
|
}
|