@cloud-carbon-footprint/core
Version:
The core logic to get cloud usage data and estimate energy and carbon emissions.
141 lines (132 loc) • 3.68 kB
text/typescript
/*
* © 2021 Thoughtworks, Inc.
*/
import UnknownEstimator, { EstimateUnknownUsageBy } from '../UnknownEstimator'
describe('UnknownEstimator', () => {
describe('Classification by service and usage unit', () => {
it('does estimates for unknown usage type for AWS, based on cost', () => {
const service = 'testService'
const usageUnit = 'testUsageUnit'
const input = [
{
timestamp: new Date('2021-01-01'),
cost: 1000,
usageUnit: usageUnit,
service: service,
},
]
const awsUsEast1Region = 'us-east-1'
const awsEmissionsFactors = {
[awsUsEast1Region]: 0.000415755,
}
const awsConstants = {
kilowattHoursByServiceAndUsageUnit: {
[service]: {
[usageUnit]: {
cost: 50,
kilowattHours: 20,
},
},
},
}
const result = new UnknownEstimator(EstimateUnknownUsageBy.COST).estimate(
input,
awsUsEast1Region,
awsEmissionsFactors,
awsConstants,
)
expect(result).toEqual([
{
co2e: 0.166302,
timestamp: new Date('2021-01-01T00:00:00.000Z'),
kilowattHours: 400,
usesAverageCPUConstant: false,
},
])
})
it('does estimates for unknown usage type for AWS, based on cost, using totals for that usage unit', () => {
const service = 'testService'
const usageUnit = 'testUsageUnit'
const input = [
{
timestamp: new Date('2021-01-01'),
cost: 1000,
usageUnit: usageUnit,
service: service,
},
]
const awsUsEast1Region = 'us-east-1'
const awsEmissionsFactors = {
[awsUsEast1Region]: 0.000415755,
}
const awsConstants = {
kilowattHoursByServiceAndUsageUnit: {
total: {
[usageUnit]: {
cost: 50,
kilowattHours: 22,
},
},
},
}
const result = new UnknownEstimator(EstimateUnknownUsageBy.COST).estimate(
input,
awsUsEast1Region,
awsEmissionsFactors,
awsConstants,
)
expect(result).toEqual([
{
co2e: 0.18293220000000002,
timestamp: new Date('2021-01-01T00:00:00.000Z'),
kilowattHours: 440,
usesAverageCPUConstant: false,
},
])
})
it('does not estimate for unknown usage type for AWS, where usage unit is not in known usage', () => {
const service = 'testService'
const usageUnit = 'testUsageUnit'
const input = [
{
timestamp: new Date('2021-01-01'),
cost: 2000,
usageUnit: usageUnit,
service: service,
},
]
const awsUsEast1Region = 'us-east-1'
const awsEmissionsFactors = {
[awsUsEast1Region]: 0.000415755,
}
const awsConstants = {
kilowattHoursByServiceAndUsageUnit: {
total: {
testUsageUnitTwo: {
cost: 50,
kilowattHours: 22,
},
testUsageUnitThree: {
cost: 30,
kilowattHours: 10,
},
},
},
}
const result = new UnknownEstimator(EstimateUnknownUsageBy.COST).estimate(
input,
awsUsEast1Region,
awsEmissionsFactors,
awsConstants,
)
expect(result).toEqual([
{
co2e: 0,
timestamp: new Date('2021-01-01T00:00:00.000Z'),
kilowattHours: 0,
usesAverageCPUConstant: false,
},
])
})
})
})