mirror of
https://github.com/bluenviron/mediamtx.git
synced 2025-12-20 02:00:05 -08:00
Reply with "status": "ok" in case of success, and with "status": "error" in case of error. This makes the API more accessible and user friendly.
124 lines
3.2 KiB
Go
124 lines
3.2 KiB
Go
package api //nolint:revive
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"net/http"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/bluenviron/mediamtx/internal/auth"
|
|
"github.com/bluenviron/mediamtx/internal/conf"
|
|
"github.com/bluenviron/mediamtx/internal/test"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestConfigGlobalGet(t *testing.T) {
|
|
cnf := tempConf(t, "api: yes\n")
|
|
checked := false
|
|
|
|
api := API{
|
|
Address: "localhost:9997",
|
|
ReadTimeout: conf.Duration(10 * time.Second),
|
|
WriteTimeout: conf.Duration(10 * time.Second),
|
|
Conf: cnf,
|
|
AuthManager: &test.AuthManager{
|
|
AuthenticateImpl: func(req *auth.Request) *auth.Error {
|
|
require.Equal(t, conf.AuthActionAPI, req.Action)
|
|
require.Equal(t, "myuser", req.Credentials.User)
|
|
require.Equal(t, "mypass", req.Credentials.Pass)
|
|
checked = true
|
|
return nil
|
|
},
|
|
},
|
|
Parent: &testParent{},
|
|
}
|
|
err := api.Initialize()
|
|
require.NoError(t, err)
|
|
defer api.Close()
|
|
|
|
tr := &http.Transport{}
|
|
defer tr.CloseIdleConnections()
|
|
hc := &http.Client{Transport: tr}
|
|
|
|
var out map[string]any
|
|
httpRequest(t, hc, http.MethodGet, "http://myuser:mypass@localhost:9997/v3/config/global/get", nil, &out)
|
|
require.Equal(t, true, out["api"])
|
|
|
|
require.True(t, checked)
|
|
}
|
|
|
|
func TestConfigGlobalPatch(t *testing.T) {
|
|
cnf := tempConf(t, "api: yes\n")
|
|
|
|
api := API{
|
|
Address: "localhost:9997",
|
|
ReadTimeout: conf.Duration(10 * time.Second),
|
|
WriteTimeout: conf.Duration(10 * time.Second),
|
|
Conf: cnf,
|
|
AuthManager: test.NilAuthManager,
|
|
Parent: &testParent{},
|
|
}
|
|
err := api.Initialize()
|
|
require.NoError(t, err)
|
|
defer api.Close()
|
|
|
|
tr := &http.Transport{}
|
|
defer tr.CloseIdleConnections()
|
|
hc := &http.Client{Transport: tr}
|
|
|
|
httpRequest(t, hc, http.MethodPatch, "http://localhost:9997/v3/config/global/patch",
|
|
map[string]any{
|
|
"rtmp": false,
|
|
"readTimeout": "7s",
|
|
"protocols": []string{"tcp"},
|
|
"readBufferCount": 4096, // test setting a deprecated parameter
|
|
}, nil)
|
|
|
|
time.Sleep(500 * time.Millisecond)
|
|
|
|
var out map[string]any
|
|
httpRequest(t, hc, http.MethodGet, "http://localhost:9997/v3/config/global/get", nil, &out)
|
|
require.Equal(t, false, out["rtmp"])
|
|
require.Equal(t, "7s", out["readTimeout"])
|
|
require.Equal(t, []any{"tcp"}, out["protocols"])
|
|
require.Equal(t, float64(4096), out["readBufferCount"])
|
|
}
|
|
|
|
func TestConfigGlobalPatchUnknownField(t *testing.T) { //nolint:dupl
|
|
cnf := tempConf(t, "api: yes\n")
|
|
|
|
api := API{
|
|
Address: "localhost:9997",
|
|
ReadTimeout: conf.Duration(10 * time.Second),
|
|
WriteTimeout: conf.Duration(10 * time.Second),
|
|
Conf: cnf,
|
|
AuthManager: test.NilAuthManager,
|
|
Parent: &testParent{},
|
|
}
|
|
err := api.Initialize()
|
|
require.NoError(t, err)
|
|
defer api.Close()
|
|
|
|
b := map[string]any{
|
|
"test": "asd",
|
|
}
|
|
|
|
byts, err := json.Marshal(b)
|
|
require.NoError(t, err)
|
|
|
|
tr := &http.Transport{}
|
|
defer tr.CloseIdleConnections()
|
|
hc := &http.Client{Transport: tr}
|
|
|
|
req, err := http.NewRequest(http.MethodPatch, "http://localhost:9997/v3/config/global/patch",
|
|
bytes.NewReader(byts))
|
|
require.NoError(t, err)
|
|
|
|
res, err := hc.Do(req)
|
|
require.NoError(t, err)
|
|
defer res.Body.Close()
|
|
|
|
require.Equal(t, http.StatusBadRequest, res.StatusCode)
|
|
checkError(t, res.Body, "json: unknown field \"test\"")
|
|
}
|