More robust config parsing for concurrent/batch vals

* Ensure concurrent values are at least 1
* Ensure batch boolean follows git config's rules
* Tests for each
This commit is contained in:
rubyist 2015-05-26 15:42:37 -04:00
parent 565928c872
commit 135d59bc4e
2 changed files with 144 additions and 2 deletions

@ -76,7 +76,7 @@ func (c *Configuration) ConcurrentTransfers() int {
if v, ok := c.GitConfig("lfs.concurrenttransfers"); ok {
n, err := strconv.Atoi(v)
if err == nil {
if err == nil && n > 0 {
uploads = n
}
}
@ -86,7 +86,14 @@ func (c *Configuration) ConcurrentTransfers() int {
func (c *Configuration) BatchTransfer() bool {
if v, ok := c.GitConfig("lfs.batch"); ok {
return v == "true"
if v == "true" || v == "" {
return true
}
// Any numeric value except 0 is considered true
if n, err := strconv.Atoi(v); err == nil && n != 0 {
return true
}
}
return false
}

@ -193,3 +193,138 @@ func TestObjectsUrl(t *testing.T) {
}
}
}
func TestConcurrentTransfersSetValue(t *testing.T) {
config := &Configuration{
gitConfig: map[string]string{
"lfs.concurrenttransfers": "5",
},
}
n := config.ConcurrentTransfers()
assert.Equal(t, 5, n)
}
func TestConcurrentTransfersDefault(t *testing.T) {
config := &Configuration{}
n := config.ConcurrentTransfers()
assert.Equal(t, 3, n)
}
func TestConcurrentTransfersZeroValue(t *testing.T) {
config := &Configuration{
gitConfig: map[string]string{
"lfs.concurrenttransfers": "0",
},
}
n := config.ConcurrentTransfers()
assert.Equal(t, 3, n)
}
func TestConcurrentTransfersNonNumeric(t *testing.T) {
config := &Configuration{
gitConfig: map[string]string{
"lfs.concurrenttransfers": "elephant",
},
}
n := config.ConcurrentTransfers()
assert.Equal(t, 3, n)
}
func TestConcurrentTransfersNegativeValue(t *testing.T) {
config := &Configuration{
gitConfig: map[string]string{
"lfs.concurrenttransfers": "-5",
},
}
n := config.ConcurrentTransfers()
assert.Equal(t, 3, n)
}
func TestBatchTrue(t *testing.T) {
config := &Configuration{
gitConfig: map[string]string{
"lfs.batch": "true",
},
}
v := config.BatchTransfer()
assert.Equal(t, true, v)
}
func TestBatchNumeric1IsTrue(t *testing.T) {
config := &Configuration{
gitConfig: map[string]string{
"lfs.batch": "1",
},
}
v := config.BatchTransfer()
assert.Equal(t, true, v)
}
func TestBatchNumeric0IsFalse(t *testing.T) {
config := &Configuration{
gitConfig: map[string]string{
"lfs.batch": "0",
},
}
v := config.BatchTransfer()
assert.Equal(t, false, v)
}
func TestBatchOtherNumericsAreTrue(t *testing.T) {
config := &Configuration{
gitConfig: map[string]string{
"lfs.batch": "42",
},
}
v := config.BatchTransfer()
assert.Equal(t, true, v)
}
func TestBatchNegativeNumericsAreTrue(t *testing.T) {
config := &Configuration{
gitConfig: map[string]string{
"lfs.batch": "-1",
},
}
v := config.BatchTransfer()
assert.Equal(t, true, v)
}
func TestBatchNonBooleanIsFalse(t *testing.T) {
config := &Configuration{
gitConfig: map[string]string{
"lfs.batch": "elephant",
},
}
v := config.BatchTransfer()
assert.Equal(t, false, v)
}
func TestBatchPresentButBlankIsTrue(t *testing.T) {
config := &Configuration{
gitConfig: map[string]string{
"lfs.batch": "",
},
}
v := config.BatchTransfer()
assert.Equal(t, true, v)
}
func TestBatchAbsentIsFalse(t *testing.T) {
config := &Configuration{}
v := config.BatchTransfer()
assert.Equal(t, false, v)
}