2020-01-04 13:23:10 -08:00
package main
2020-01-04 17:15:16 -08:00
import (
"io/ioutil"
2020-01-04 17:43:18 -08:00
"math"
2020-01-04 17:15:16 -08:00
"os"
2020-01-04 18:09:41 -08:00
"path/filepath"
2020-01-04 17:15:16 -08:00
"strconv"
2020-01-04 17:43:18 -08:00
"strings"
2020-01-04 17:15:16 -08:00
"testing"
"github.com/stretchr/testify/assert"
)
2020-01-04 13:23:10 -08:00
// TODO(rdelvalle): Add more thourough testing. Generate mock files
// that mimic the powercap subsystem and create test to operate on it.
2020-01-04 17:15:16 -08:00
func TestCapNode ( t * testing . T ) {
2020-01-04 13:23:10 -08:00
2020-01-04 18:09:41 -08:00
RAPLdir , err := ioutil . TempDir ( "" , "intel-rapl" )
assert . NoError ( t , err )
defer os . RemoveAll ( RAPLdir )
2020-01-04 13:23:10 -08:00
2020-01-04 18:09:41 -08:00
zonePath := filepath . Join ( RAPLdir , raplPrefixCPU + ":0" )
err = os . Mkdir ( zonePath , 755 )
assert . NoError ( t , err )
err = ioutil . WriteFile ( filepath . Join ( zonePath , maxPowerFileShortWindow ) , [ ] byte ( "1500000" ) , 0444 )
assert . NoError ( t , err )
err = ioutil . WriteFile ( filepath . Join ( zonePath , powerLimitFileShortWindow ) , [ ] byte ( "1500000" ) , 0644 )
assert . NoError ( t , err )
err = capNode ( RAPLdir , 95 )
assert . NoError ( t , err )
2020-01-04 13:23:10 -08:00
}
2020-01-04 17:15:16 -08:00
func TestMaxPower ( t * testing . T ) {
const maxWattage uint64 = 1500000
tmpfile , err := ioutil . TempFile ( "" , maxPowerFileShortWindow )
assert . NoError ( t , err )
defer os . Remove ( tmpfile . Name ( ) )
_ , err = tmpfile . Write ( [ ] byte ( strconv . FormatUint ( maxWattage , 10 ) ) )
assert . NoError ( t , err )
maxWatts , err := maxPower ( tmpfile . Name ( ) )
assert . NoError ( t , err )
assert . Equal ( t , maxWattage , maxWatts )
err = tmpfile . Close ( )
assert . NoError ( t , err )
}
2020-01-04 17:43:18 -08:00
func TestCapZone ( t * testing . T ) {
const maxPower float64 = 1500000
const percentage float64 = .50
tmpfile , err := ioutil . TempFile ( "" , powerLimitFileShortWindow )
assert . NoError ( t , err )
defer os . Remove ( tmpfile . Name ( ) )
powercap := uint64 ( math . Ceil ( maxPower * percentage ) )
err = capZone ( tmpfile . Name ( ) , powercap )
assert . NoError ( t , err )
newCapBytes , err := ioutil . ReadFile ( tmpfile . Name ( ) )
assert . NoError ( t , err )
newCap , err := strconv . ParseUint ( strings . TrimSpace ( string ( newCapBytes ) ) , 10 , 64 )
assert . NoError ( t , err )
assert . Equal ( t , powercap , newCap )
err = tmpfile . Close ( )
assert . NoError ( t , err )
}